友行

SKILL生活服务
生活服务 未标注权限 许可证不明确
安装这个技能

查询友行青年社群的活动信息。当用户询问友行的活动、近期活动、活动安排、某个活动详情时使用。支持列出所有活动和根据活动ID获取详情。默认输出JSON,用户要求时可输出Markdown格式。

一句话选型结论

按资料字段整理

友行是生活服务类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类生活服务 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_9968ed06/youxing
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

生活服务
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_9968ed06仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791710201
正文体量6.1 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
行程与攻略

按目的地和天数排行程。

日常信息查询

查天气、交通、办事信息。

生活事务整理

把琐事整理成清单逐项处理。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在生活服务场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
友行当前 未标注权限 未标注 未标注 未标注 有
食谱批量下载文件夹 联网访问 GitHub 仓库 28.5 万 Codex、Claude、Cursor 有
食谱创建演示文稿 未标注权限 GitHub 仓库 28.0 万 Codex、Claude、Cursor 有
recipe 备份 sheet AS CSV 联网访问 GitHub 仓库 27.9 万 Codex、Claude、Cursor 有
recipe create Gmail filter 邮件管理 未标注权限 GitHub 仓库 27.8 万 Codex、Claude、Cursor 有
配方观察驱动器变化 联网访问 GitHub 仓库 27.4 万 Codex、Claude、Cursor 有

SKILL.md 全文

6.1 KB
模型实际读到的说明书原文,来自技能仓库

概述

友行青年社群活动查询工具。

使用时机

  • 用户问友行有什么活动、近期活动列表
  • 用户想了解某个具体活动的详情
  • 用户提到"友行"、"友行青年社群"

通用参数

CLUB_ID = 018c32aa-7958-ede5-c6ae-403c9881a2a5
API_BASE = https://api.cumen.fun/api/xx.cumen.v1.CumenService

功能一:列出所有活动

node -e "
const https = require('https');
const API = 'https://api.cumen.fun/api/xx.cumen.v1.CumenService/ListCampaignsOfClub';
const CLUB_ID = '018c32aa-7958-ede5-c6ae-403c9881a2a5';

function post(url, body) {
  return new Promise((resolve, reject) => {
    const data = JSON.stringify(body);
    const req = https.request(url, { method: 'POST', headers: { 'Content-Type': 'application/json' } }, (res) => {
      let buf = '';
      res.on('data', (c) => (buf += c));
      res.on('end', () => { try { resolve(JSON.parse(buf)); } catch { reject(new Error(buf)); } });
    });
    req.on('error', reject);
    req.write(data);
    req.end();
  });
}

function toUTC8(ts) {
  if (!ts || ts.startsWith('1970')) return null;
  const d = new Date(ts);
  return new Date(d.getTime() + 8 * 3600000).toISOString().replace('Z', '+08:00');
}

const STATUS = { CAMPAIGN_STATUS_ONGOING: 'ONGOING', CAMPAIGN_STATUS_ENDED: 'ENDED', CAMPAIGN_STATUS_BLOCKED: 'BLOCKED' };

post(API, { clubId: CLUB_ID }).then((resp) => {
  const items = resp.items || [];
  const result = items.map((item) => {
    const c = item.campaign || {};
    return {
      id: c.id || '',
      title: c.title || '',
      price: (c.price || {}).value || '0',
      address: item.address || '',
      start_time: toUTC8(c.start_time),
      end_time: toUTC8(c.end_time),
      join_deadline: toUTC8(c.join_deadline),
      capacity: c.person_number_of_team || 0,
      status: STATUS[c.status] || c.status || '',
      finished: c.finish || false,
    };
  });
  console.log(JSON.stringify(result, null, 2));
}).catch((e) => { console.error(e.message); process.exit(1); });
"

Markdown 输出格式

用户要求 Markdown 时,将结果渲染为表格:

## 友行青年社群 活动列表 (14个)

| # | 标题 | 价格 | 地址 | 开始时间 | 结束时间 | 名额 | 已结束 |
|---|------|------|------|----------|----------|------|--------|
| 1 | 咖啡拉花单次课程|友行 周日下午 | ¥39 | ... | 04-12 14:00 | 04-12 16:00 | 20 | 否 |

时间格式 MM-DD HH:mm,标题中 | 替换为 |。

功能二:获取活动详情

将 CAMPAIGN_ID 替换为实际活动 ID:

node -e "
const https = require('https');
const API = 'https://api.cumen.fun/api/xx.cumen.v1.CumenService/GetCampaign';
const CAMPAIGN_ID = 'CAMPAIGN_ID';

function post(url, body) {
  return new Promise((resolve, reject) => {
    const data = JSON.stringify(body);
    const req = https.request(url, { method: 'POST', headers: { 'Content-Type': 'application/json' } }, (res) => {
      let buf = '';
      res.on('data', (c) => (buf += c));
      res.on('end', () => { try { resolve(JSON.parse(buf)); } catch { reject(new Error(buf)); } });
    });
    req.on('error', reject);
    req.write(data);
    req.end();
  });
}

function toUTC8(ts) {
  if (!ts || ts.startsWith('1970')) return null;
  const d = new Date(ts);
  return new Date(d.getTime() + 8 * 3600000).toISOString().replace('Z', '+08:00');
}

const STATUS = { CAMPAIGN_STATUS_ONGOING: 'ONGOING', CAMPAIGN_STATUS_ENDED: 'ENDED' };
const KIND = { 1: 'CREATE_TEAM', 2: 'GROUP_PURCHASE', 3: 'LEAGUES' };

post(API, { campaignId: CAMPAIGN_ID }).then((data) => {
  const c = data.campaign || {};
  const p = data.post || {};
  const priceVal = (typeof data.price === 'object' ? data.price.value : data.price) || (c.price || {}).value || '0';
  const poi = p.poi || {};
  const loc = poi.location_gcj02 || {};
  const result = {
    id: c.id,
    title: c.title,
    status: STATUS[c.status] || c.status,
    kind: KIND[c.kind] || c.kind,
    price: priceVal,
    start_time: toUTC8(c.start_time),
    end_time: toUTC8(c.end_time),
    join_deadline: toUTC8(c.join_deadline),
    quit_deadline: toUTC8(c.quit_deadline),
    capacity: c.person_number_of_team || 0,
    address: { name: poi.name || '', detail: poi.address || '', latitude: loc.latitude, longitude: loc.longitude },
    summary: p.summary || '',
    description: p.content || '',
    images: (p.images || []).map((img) => img.url),
    share_count: data.share_count || 0,
    comment_count: data.comment_count || 0,
    finished: c.finish || false,
  };
  console.log(JSON.stringify(result, null, 2));
}).catch((e) => { console.error(e.message); process.exit(1); });
"

Markdown 输出格式

用户要求 Markdown 时:

## 咖啡拉花单次课程|友行 周日下午

- **状态**: 进行中
- **类型**: 组团
- **价格**: ¥39
- **时间**: 2026-04-12 14:00 ~ 16:00
- **报名截止**: 2026-04-12 14:00
- **名额**: 20人
- **地点**: 安派德咖啡学院
- **地址**: 合肥市蜀山区望江西路388号新粮仓11栋4103
- **分享**: 6 | **评论**: 3

> ☕️ 咖啡拉花体验课 | 新手友好 · 咖啡管饱!
> ...

字段映射规则

  • price: 优先取顶层 price.value(可能为 string 或 object),否则取 campaign.price.value
  • address: 列表接口取 item.address,详情接口从 post.poi 提取 name/address/location
  • description: 取 post.content
  • summary: 取 post.summary
  • images: 取 post.images[].url
  • 时间:UTC → UTC+8 ISO 格式
  • status 映射:CAMPAIGN_STATUS_ONGOING → ONGOING,CAMPAIGN_STATUS_ENDED → ENDED,CAMPAIGN_STATUS_BLOCKED → BLOCKED
  • kind 映射:1 → CREATE_TEAM,2 → GROUP_PURCHASE,3 → LEAGUES

注意事项

  • ListCampaignsOfClub 返回的活动不保证按时间排序
  • 活动描述 (post.content) 可能包含 emoji 和富文本格式
  • 时间均为 UTC,需转为 UTC+8 展示

常见问题

5 问
答案由本站依据条目字段整理
友行怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_9968ed06/youxing。安装方式为未标注。装完刷新技能列表或重开客户端。

友行支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

友行权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

友行收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

友行用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。