SenseNova-Skills is a collection of modular skills that extend SenseNova models with office-assistant capabilities such as image generation, presentation creation, spreadsheet analysis, and research. The skills are designed for use in agent runtimes and can be combined into productivity workflows; the catalogue entries are individual skills and agents from this collection.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add OpenSenseNova/SenseNova-Skills --skill line-chart-visualizationgit clone --depth 1 https://github.com/OpenSenseNova/SenseNova-SkillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/opensensenova/sensenova-skills/line-chart-visualization)<a href="https://agentmods.dev/skills/opensensenova/sensenova-skills/line-chart-visualization"><img src="https://agentmods.dev/badge/skills/opensensenova/sensenova-skills/line-chart-visualization/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/opensensenova/sensenova-skills/line-chart-visualization"><img src="https://agentmods.dev/badge/skills/opensensenova/sensenova-skills/line-chart-visualization.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00061 | $0.02039 |
| Opus 5 | $0.00030 | $0.01019 |
| Sonnet 5 | $0.00012 | $0.00408 |
| Haiku 4.5 | $0.00006 | $0.00204 |
Grade A, and why
line-chart-visualization scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 174 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Step1 数据加载与预处理(支持大文件Parquet转换与动态表头识别)。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import os
import re
# 设置中英文字体与图表美化
plt.rcParams['font.sans-serif'] = ['SimHei', 'WenQuanYi Zen Hei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
file_path = 'input_data.xlsx'
# 处理大型Excel文件:统计总行数,若≥1万则转换为Parquet格式提升效率
xls = pd.ExcelFile(file_path)
total_rows = sum(pd.read_excel(xls, sheet_name=s, header=None).shape[0] for s in xls.sheet_names)
if total_rows >= 10000:
parquet_path = "temp_converted_file.parquet"
with pd.ExcelWriter(parquet_path, engine='pyarrow') as writer:
for sheet in xls.sheet_names:
df_sheet = pd.read_excel(xls, sheet_name=sheet, header=None)
df_sheet.to_excel(writer, sheet_name=sheet, index=False, header=False)
df = pd.read_excel(parquet_path, sheet_name='Sheet1', header=None)
else:
df = pd.read_excel(file_path, sheet_name='Sheet1', header=None)
# 动态识别表头并提取数据
header_row_idx = None
target_cols = ['group_col', 'value_col1', 'value_col2'] # 占位示例列名
for idx, row in df.iterrows():
row_vals = row.astype(str).tolist()
if all(col in row_vals for col in target_cols):
header_row_idx = idx
break
if header_row_idx is not None:
df.columns = df.iloc[header_row_idx].tolist()
df_clean = df.iloc[header_row_idx + 1:].reset_index(drop=True)
else:
df_clean = df.copy()
Step2 数据清洗与特征工程(包含正则提取、缺失值处理与合并单元格还原)。
# 合并单元格处理 (ffill + 遍历还原)
if 'group_col' in df_clean.columns:
df_clean['group_col'] = df_clean['group_col'].ffill()
# 数据清洗正则表达式:提取数值
if 'value_col1' in df_clean.columns:
df_clean['value_col1'] = df_clean['value_col1'].astype(str).str.replace(r'[^\d.]', '', regex=True)
df_clean['value_col1'] = pd.to_numeric(df_clean['value_col1'], errors='coerce')
df_clean = df_clean.dropna(subset=['value_col1']).reset_index(drop=True)
# 分类映射函数骨架
def map_category(val):
if pd.isna(val): return 'Unknown'
if val > 100: return 'High' # 占位示例
elif val > 50: return 'Medium'
return 'Low'
if 'value_col1' in df_clean.columns:
df_clean['level'] = df_clean['value_col1'].apply(map_category)
# 多维度评分/分级算法结构
def calculate_score(row):
score = 0
if pd.notna(row.get('value_col1')) and float(row['value_col1']) > 50: # 占位示例
score += 50
if pd.notna(row.get('value_col2')) and float(row['value_col2']) < 10: # 占位示例
score += 50
return score
df_clean['comprehensive_score'] = df_clean.apply(calculate_score, axis=1)
Step3 聚类分析与交叉统计(包含标准化、KMeans与多维度交叉分析)。
numeric_cols = ['value_col1', 'comprehensive_score']
existing_num_cols = [c for c in numeric_cols if c in df_clean.columns]
if existing_num_cols:
# 数值特征标准化
scaler = StandardScaler()
numeric_scaled = scaler.fit_transform(df_clean[existing_num_cols].fillna(0))
# 聚类分析识别潜在数据群组结构
kmeans = KMeans(n_clusters=3, random_state=42)
df_clean['cluster_label'] = kmeans.fit_predict(numeric_scaled)
# value_counts + 占比计算
if 'level' in df_clean.columns:
level_counts = df_clean['level'].value_counts()
level_ratio = df_clean['level'].value_counts(normalize=True) * 100
summary_df = pd.DataFrame({'频次': level_counts, '占比(%)': level_ratio.round(2)})
summary_df.loc['总计'] = summary_df.sum()
print("分类统计汇总:\n", summary_df)
# 交叉分析 crosstab/pivot
if 'cluster_label' in df_clean.columns and 'level' in df_clean.columns:
cross_tb = pd.crosstab(df_clean['cluster_label'], df_clean['level'], margins=True, margins_name='总计')
print("\n聚类与等级交叉分析:\n", cross_tb)
Step4 多维度可视化与结果输出(包含趋势、分布、占比与敏感性分析图表)。
# 创建多维度综合可视化图表
fig, axes = plt.subplots(2, 2, figsize=(16, 12), dpi=150)
fig.suptitle('综合数据分析图表', fontsize=16)
group_col = 'group_col' if 'group_col' in df_clean.columns else df_clean.columns[0]
# 1. 趋势对比折线图
if 'value_col1' in df_clean.columns:
axes[0, 0].plot(df_clean[group_col].astype(str).str[:10], df_clean['value_col1'], marker='o', label='指标1', color='#1f77b4')
if 'comprehensive_score' in df_clean.columns:
axes[0, 0].plot(df_clean[group_col].astype(str).str[:10], df_clean['comprehensive_score'], marker='s', label='综合评分', color='#ff7f0e')
axes[0, 0].set_title('多指标趋势对比')
axes[0, 0].set_xlabel('分组维度')
axes[0, 0].set_ylabel('数值')
axes[0, 0].legend(loc='upper right')
axes[0, 0].grid(True, alpha=0.3)
axes[0, 0].tick_params(axis='x', rotation=45)
# 2. 分布特征直方图
if 'value_col1' in df_clean.columns:
axes[0, 1].hist(df_clean['value_col1'].dropna(), bins=15, alpha=0.7, color='skyblue', edgecolor='black')
axes[0, 1].set_title('数值分布特征')
axes[0, 1].set_xlabel('数值区间')
axes[0, 1].set_ylabel('频次')
axes[0, 1].grid(True, alpha=0.3)
# 3. 市场份额/占比饼图
if 'level' in df_clean.columns:
level_counts = df_clean['level'].value_counts()
colors_pie = plt.cm.Set3(np.linspace(0, 1, len(level_counts)))
axes[1, 0].pie(level_counts, labels=level_counts.index, autopct='%1.1f%%', colors=colors_pie, startangle=90)
axes[1, 0].set_title('分类占比分布')
# 4. 参数敏感性分析/聚类结果散点图
if 'cluster_label' in df_clean.columns and 'value_col1' in df_clean.columns:
sns.scatterplot(data=df_clean, x=group_col, y='value_col1', hue='cluster_label', ax=axes[1, 1], palette='Set1', s=80)
axes[1, 1].set_title('聚类分组散点图')
axes[1, 1].tick_params(axis='x', rotation=45)
axes[1, 1].grid(True, alpha=0.3)
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
# 保存图表与清洗后的数据
chart_path = "output_chart.png"
output_path = "output_table.xlsx"
plt.savefig(chart_path, dpi=300, bbox_inches='tight')
plt.close()
df_clean.to_excel(output_path, index=False)
# 生成下载链接
print(f"分析完成。")
print(f"图表下载链接: file:///{os.path.abspath(chart_path)}")
print(f"数据下载链接: file:///{os.path.abspath(output_path)}")
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 174 lines · 61 tokens per session scan A 4d39e2ff4c04
line-chart-visualization is a skill published in the GitHub repository OpenSenseNova/SenseNova-Skills (5,476 stars, last pushed yesterday), licensed MIT. It adds 61 tokens to every session and 2,039 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
article-writer
Multi-style article creation skill. Supports 5 writing styles (deep analysis, practical guide, story-driven, opinion, news brief), including complete workflow: material collection → outline → content → formatting. Activated when users mention "write article", "write post", "create", or "draft".
skin-creator
Create and apply a two-asset LobsterAI visual skin from the user's style description. Use only when the AI Skin Designer kit supplies the structured skinpack workflow marker; do not use for ordinary theme or image requests.
content-planner
WeChat Official Account topic planning and content calendar management. Based on WeChat article search and trending analysis, generates differentiated topic recommendations and outputs structured content calendars. Activated when users mention "topic", "planning", "content calendar", "trending", or "what to write next…
music-search
Search cloud drives for downloadable music resources (songs, albums, lossless audio). Use this skill when the user wants to download a specific song or album. Do NOT use for general music information, lyrics, or recommendations.
stock-analyzer
A comprehensive stock deep analysis tool that combines real-time quotes, fundamental metrics, technical indicators, and growth analysis into a single professional report. Supports A-share, US stocks, HK stocks. Generates detailed investment recommendations with risk assessment and actionable trading strategies.
ha-skill-creator
Create, edit, improve, or audit Hope Agent skills. Use when the user wants to: (1) create a new skill from scratch, (2) edit or improve an existing skill, (3) review or clean up a SKILL.md file, (4) run evaluations to test skill effectiveness, (5) optimize skill descriptions for better trigger accuracy. Trigger…