feishu-user-md
飞书端读取USER.md任务清单。当用户说"查看任务"、"我的任务"时触发,实时解析并返回格式化的分类任务列表,让用户快速了解当前所有可用任务和技能。
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install openclaw-skills-feishu-user-md
Repository
Skill path: skills/349840432m-dev/feishu-user-md
飞书端读取USER.md任务清单。当用户说"查看任务"、"我的任务"时触发,实时解析并返回格式化的分类任务列表,让用户快速了解当前所有可用任务和技能。
Open repositoryBest for
Primary workflow: Ship Full Stack.
Technical facets: Full Stack.
Target audience: everyone.
License: MIT.
Original source
Catalog source: SkillHub Club.
Repository owner: openclaw.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install feishu-user-md into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/openclaw/skills before adding feishu-user-md to shared team environments
- Use feishu-user-md for development workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: feishu-user-md
description: 飞书端读取USER.md任务清单。当用户说"查看任务"、"我的任务"时触发,实时解析并返回格式化的分类任务列表,让用户快速了解当前所有可用任务和技能。
version: 1.1.0
author: 349840432m-dev
license: MIT
acceptLicenseTerms: true
metadata:
clawdbot:
emoji: "📋"
files: ["scripts/*"]
---
# Feishu User.md Reader - 飞书任务清单查询
实时读取 `~/.openclaw/workspace/USER.md`,解析任务清单并格式化为分类列表返回。
## 核心功能
### 实时任务解析
从 `~/.openclaw/workspace/USER.md` 读取三类数据源:
1. **常规任务清单表格** → 提取任务名、频率、技能名、描述
2. **日常自动化表格** → 提取定时任务时间和名称
3. **手动触发指令表格** → 提取触发词映射
### 智能分类
任务按用途自动归类:
- 📝 **内容创作** — 图片提示词、API图片、知识漫画、信息图
- 📕 **小红书运营** — 完整运营、发布、卡片生成
- 📤 **内容发布** — 微信公众号、Markdown转HTML
- 🔧 **工具** — 翻译、图片压缩、网页抓取、数据导出
- 📰 **新闻与SEO** — 添加/撰写新闻、SEO文章
- 📂 **日常管理** — 对话归档、Token统计、周报、日历
- 📁 **其他** — 未匹配的任务
### 输出格式
**注意**:返回内容动态读取 USER.md 实际内容,不硬编码。
```
📋 您的任务清单(共N项)
【定时自动化】
• 0:00 对话记录自动归档
• 9:00 Token日报生成
【内容创作】
• 图片提示词生成 - 说"生成图片提示词"
• API图片生成 - 说"生成图片"
💡 直接发送任务关键词即可触发
```
## 触发指令
| 指令 | 说明 |
|------|------|
| `查看任务` | 基础触发指令 |
| `我的任务` | 简写形式 |
| `有什么技能` | 查看可用技能 |
| `帮助` / `?` | 帮助信息 |
## 使用方法
```bash
node scripts/feishu-user-md.js read # 格式化输出
node scripts/feishu-user-md.js json # JSON 输出
```
## 技术实现
- Node.js 脚本,仅使用内置模块(`fs`、`path`、`os`),无第三方依赖
- 正则表达式解析 Markdown 表格
- 按关键词自动归类任务
- 每次调用**实时读取** USER.md,无缓存
### 解析流程
1. `readUserMd()` — 读取文件内容
2. `parseUserMd(content)` — 提取常规任务、定时任务、触发指令
3. `categorize(tasks)` — 按用途关键词分类
4. `formatForFeishu(data)` — 格式化为飞书消息文本
## 文件位置
- **技能目录**: `skills/feishu-user-md/`
- **脚本文件**: `skills/feishu-user-md/scripts/feishu-user-md.js`
- **数据源**: `~/.openclaw/workspace/USER.md`
## 注意事项
1. **无缓存** — 每次调用都实时读取 USER.md,更新后立即生效
2. **动态触发** — 所有触发指令从 USER.md 的"手动触发指令"表格动态读取
3. **自动同步** — 新增/删除任务只需修改 USER.md,飞书端自动同步
4. **内容动态** — 返回内容根据 USER.md 实际内容生成,不硬编码
## Security & Privacy
- 仅读取本地 `~/.openclaw/workspace/USER.md` 文件
- 不进行任何网络请求,不发送数据到外部
- 不写入任何文件,不存储用户数据
- 无持久化操作,无后台进程
---
## Referenced Files
> The following files are referenced in this skill and included for context.
### scripts/feishu-user-md.js
```javascript
#!/usr/bin/env node
/**
* Feishu User.md Reader
* 动态读取 USER.md,解析任务清单和触发指令,格式化为飞书消息
*/
const fs = require('fs');
const path = require('path');
const os = require('os');
const USER_MD = path.join(os.homedir(), '.openclaw/workspace/USER.md');
function readUserMd() {
try {
if (!fs.existsSync(USER_MD)) {
return { error: 'USER.md 文件不存在' };
}
const content = fs.readFileSync(USER_MD, 'utf8');
return parseUserMd(content);
} catch (err) {
return { error: `读取失败: ${err.message}` };
}
}
function parseUserMd(content) {
const result = {
scheduled: [],
tasks: [],
triggers: {},
total: 0
};
// 解析"常规任务清单"表格
const taskRows = content.match(/\|\s*\d+\s*\|[^|]+\|[^|]+\|[^|]+\|[^|]+\|[^|]+\|/g);
if (taskRows) {
result.total = taskRows.length;
taskRows.forEach(row => {
const cells = row.split('|').map(c => c.trim()).filter(c => c);
if (cells.length >= 6) {
result.tasks.push({
num: cells[0],
name: cells[1],
freq: cells[2],
skill: cells[3].replace(/`/g, ''),
desc: cells[5]
});
}
});
}
// 解析"定时自动化"表格
const scheduleSection = content.match(/日常自动化[\s\S]*?\n\n/);
if (scheduleSection) {
const timeRows = scheduleSection[0].match(/\|\s*\*\*[\d:]+\*\*\s*\|[^|]+\|[^|]+\|/g);
if (timeRows) {
timeRows.forEach(row => {
const cells = row.split('|').map(c => c.trim()).filter(c => c);
if (cells.length >= 3) {
result.scheduled.push({
time: cells[0].replace(/\*\*/g, ''),
name: cells[1],
skill: cells[2].replace(/`/g, '')
});
}
});
}
}
// 解析"手动触发指令"表格 → 动态构建触发词映射
const triggerSection = content.match(/手动触发指令[\s\S]*?(?=\n---|\n##|$)/);
if (triggerSection) {
const triggerRows = triggerSection[0].match(/\|\s*[^|\n]+\s*\|\s*[^|\n]+\s*\|/g);
if (triggerRows) {
triggerRows.forEach(row => {
const cells = row.split('|').map(c => c.trim()).filter(c => c);
if (cells.length >= 2 && !cells[0].includes('---') && !cells[0].includes('任务')) {
const taskName = cells[0];
const trigger = cells[1].split('/')[0].trim().replace(/"/g, '');
result.triggers[taskName] = trigger;
}
});
}
}
return result;
}
/**
* 按用途分类任务
*/
function categorize(tasks) {
const categories = {
'内容创作': ['图片提示词', 'API图片', '知识漫画', '信息图', 'infographic'],
'小红书运营': ['小红书'],
'内容发布': ['公众号', 'Markdown转HTML', '微信'],
'工具': ['翻译', '图片压缩', '网页转', 'MySQL', 'url'],
'新闻与SEO': ['新闻', 'SEO'],
'日常管理': ['清理', 'token', '对话', '周报', '日历', '任务', '飞书']
};
const result = {};
const used = new Set();
for (const [cat, keywords] of Object.entries(categories)) {
const matched = tasks.filter(t =>
keywords.some(kw => t.name.includes(kw) || t.desc.includes(kw)) && !used.has(t.num)
);
if (matched.length > 0) {
result[cat] = matched;
matched.forEach(t => used.add(t.num));
}
}
const remaining = tasks.filter(t => !used.has(t.num));
if (remaining.length > 0) {
result['其他'] = remaining;
}
return result;
}
function formatForFeishu(data) {
if (data.error) {
return `❌ 错误: ${data.error}`;
}
let msg = `📋 您的任务清单(共${data.total}项)\n\n`;
// 定时任务
if (data.scheduled.length > 0) {
msg += `【定时自动化】\n`;
data.scheduled.forEach(t => {
msg += `• ${t.time} ${t.name}\n`;
});
msg += '\n';
}
// 按类别输出手动任务
const grouped = categorize(data.tasks);
for (const [cat, tasks] of Object.entries(grouped)) {
msg += `【${cat}】\n`;
tasks.forEach(t => {
const trigger = data.triggers[t.name];
msg += trigger
? `• ${t.name} - 说"${trigger}"\n`
: `• ${t.name}\n`;
});
msg += '\n';
}
msg += `💡 直接发送任务关键词即可触发`;
return msg;
}
function main() {
const command = process.argv[2];
if (command === 'read') {
console.log(formatForFeishu(readUserMd()));
} else if (command === 'json') {
console.log(JSON.stringify(readUserMd(), null, 2));
} else {
console.log(`
Feishu User.md Reader - 飞书任务清单查询
用法:
node feishu-user-md.js read 读取并格式化输出
node feishu-user-md.js json 读取并输出JSON
`);
}
}
main();
```
---
## Skill Companion Files
> Additional files collected from the skill directory layout.
### README.md
```markdown
# 飞书任务清单查询
实时读取 `USER.md`,解析任务清单并以分类格式返回,让飞书用户快速了解所有可用任务和技能。
## 安装
```bash
clawhub install feishu-user-md
```
或手动安装:将整个文件夹复制到 `~/.openclaw/skills/feishu-user-md/`。
## 功能特性
- **实时解析**:每次调用动态读取 USER.md,无缓存,更新后立即生效
- **智能分类**:按内容创作、小红书运营、内容发布、工具、新闻与SEO 等类别自动归类
- **触发词映射**:自动提取手动触发指令,展示每个任务的触发方式
- **零依赖**:仅使用 Node.js 内置模块,无需安装第三方包
## 项目结构
```
feishu-user-md/
├── SKILL.md # 技能说明(ClawHub 必需)
├── claw.json # ClawHub 清单文件
├── README.md # 项目文档
└── scripts/
└── feishu-user-md.js # 主脚本(读取、解析、格式化)
```
## 使用方式
### 命令行
```bash
node scripts/feishu-user-md.js read # 格式化输出
node scripts/feishu-user-md.js json # JSON 输出
```
### 飞书触发
直接在飞书中发送以下指令:
- "查看任务" / "我的任务"
- "有什么技能"
- "帮助" / "?"
## 数据源
所有数据来自 `~/.openclaw/workspace/USER.md`,包含三类表格:
- **常规任务清单**(序号、名称、频率、技能、描述)
- **日常自动化**(时间、任务名、技能)
- **手动触发指令**(任务名、触发词)
新增或删除任务只需修改 USER.md,飞书端自动同步。
## 前置条件
- OpenClaw 已安装并运行
- `~/.openclaw/workspace/USER.md` 文件存在且包含任务清单表格
## 技术栈
- Node.js(仅内置模块:`fs`、`path`、`os`)
```
### _meta.json
```json
{
"owner": "349840432m-dev",
"slug": "feishu-user-md",
"displayName": "飞书协同任务读取",
"latest": {
"version": "1.0.0",
"publishedAt": 1773210501733,
"commit": "https://github.com/openclaw/skills/commit/7cca594144e8b17a5a4a336f80f656ce53e8b6fc"
},
"history": []
}
```