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 threshold-cell-coloringgit 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/threshold-cell-coloring)<a href="https://agentmods.dev/skills/opensensenova/sensenova-skills/threshold-cell-coloring"><img src="https://agentmods.dev/badge/skills/opensensenova/sensenova-skills/threshold-cell-coloring/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/threshold-cell-coloring"><img src="https://agentmods.dev/badge/skills/opensensenova/sensenova-skills/threshold-cell-coloring.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.00060 | $0.01188 |
| Opus 5.5 | $0.00024 | $0.00475 |
| Sonnet 5.5 | $0.00012 | $0.00238 |
| Haiku 4.5 | $0.00006 | $0.00119 |
Grade A, and why
large-file-conditional-formatting 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 2mo 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.
What it actually says
Skill Steps
Note: This sub-skill covers one step of the Excel analysis workflow. For the full pipeline (file reading, row counting, large-file optimization, export), see the parent workflow SKILL.md.
Step1 读取文件并统计所有 sheet 的行数,汇总后打印总行数,用于判断是否需要大文件加速。
import pandas as pd
import openpyxl
file_path = "input_data.xlsx"
# 获取所有sheet名称
wb = openpyxl.load_workbook(file_path, read_only=True)
sheet_names = wb.sheetnames
print("Sheet列表:", sheet_names)
print("Sheet数量:", len(sheet_names))
# 统计每个sheet的行数
total_rows = 0
for name in sheet_names:
df_temp = pd.read_excel(file_path, sheet_name=name, header=None)
rows = len(df_temp)
total_rows += rows
print(f"Sheet '{name}': {rows} 行")
print(f"\n总行数 = {total_rows}")
Step2 提取目标实体的时间序列数据,计算平均值,并构建包含比较结果的结构化 DataFrame。
target_entity = 'Target_Entity' # 占位示例,如 'US'
# 提取目标行数据 (假设第0列为实体名称)
target_row = df[df[0] == target_entity]
# 提取时间标签和对应数值 (假设第6行为表头,1:10列为数据)
time_labels = df.iloc[6, 1:10].tolist()
target_values = target_row.iloc[0, 1:10].tolist()
target_values_numeric = [float(v) for v in target_values]
# 计算平均值
avg_value = sum(target_values_numeric) / len(target_values_numeric)
# 构建结果 DataFrame
result_data = {
'时间维度': time_labels,
'指标数值': target_values_numeric,
'是否低于平均值': [v < avg_value for v in target_values_numeric]
}
result_df = pd.DataFrame(result_data)
Step3 使用 openpyxl 将分析结果保存为 Excel 文件,应用精细的样式控制(加粗标题、边框、居中对齐),并对低于平均值的行进行条件格式填充(标绿)。
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
wb = Workbook()
ws = wb.active
ws.title = "指标分析报告"
# 定义样式
green_fill = PatternFill(start_color="92D050", end_color="92D050", fill_type="solid")
header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
header_font = Font(bold=True, color="FFFFFF")
thin_border = Border(
left=Side(style='thin'), right=Side(style='thin'),
top=Side(style='thin'), bottom=Side(style='thin')
)
# 设置主标题
ws.merge_cells('A1:D1')
ws['A1'] = f"目标实体指标分析 - 平均值: {avg_value:.2f}"
ws['A1'].font = Font(bold=True, size=14)
ws['A1'].alignment = Alignment(horizontal='center')
# 设置表头
headers = ['时间维度', '指标数值', '与平均值比较', '是否标绿']
for col, header in enumerate(headers, 1):
cell = ws.cell(row=3, column=col, value=header)
cell.fill = header_fill
cell.font = header_font
cell.alignment = Alignment(horizontal='center')
cell.border = thin_border
# 写入数据并应用条件格式
for i, row_data in result_df.iterrows():
row_num = i + 4
time_label = row_data['时间维度']
value = row_data['指标数值']
below_avg = row_data['是否低于平均值']
# 写入各列数据
ws.cell(row=row_num, column=1, value=time_label).alignment = Alignment(horizontal='center')
ws.cell(row=row_num, column=2, value=value).alignment = Alignment(horizontal='center')
diff = value - avg_value
ws.cell(row=row_num, column=3, value=f"{diff:+.2f}").alignment = Alignment(horizontal='center')
ws.cell(row=row_num, column=4, value="是" if below_avg else "否").alignment = Alignment(horizontal='center')
# 添加边框并根据条件标绿整行
for col in range(1, 5):
cell = ws.cell(row=row_num, column=col)
cell.border = thin_border
if below_avg:
cell.fill = green_fill
# 调整列宽
ws.column_dimensions['A'].width = 15
ws.column_dimensions['B'].width = 20
ws.column_dimensions['C'].width = 18
ws.column_dimensions['D'].width = 12
output_path = "output_report.xlsx"
wb.save(output_path)
print(f"分析报告已保存至: {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.
- 2mo ago First seen · 124 lines · 60 tokens per session scan A 539ded0021ba
large-file-conditional-formatting is a skill published in the GitHub repository OpenSenseNova/SenseNova-Skills (6,040 stars, last pushed 4d ago), licensed MIT. It adds 60 tokens to every session and 1,188 once invoked, about $0.0002 per session on Opus 5.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.
large-file-conditional-formatting compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| large-file-conditional-formattingOpenSenseNova/SenseNova-Skills | Skill | 6.0k | 4d ago | MIT | A | 60 | Claude Code, Codex |
| ha-data-analyticsshiwenwen/hope-agent | Skill | 1.9k | today | MIT | A | 106 | Codex |
| office-xlsxshiwenwen/hope-agent | Skill | 1.9k | today | MIT | A | 64 | Claude Code, Codex |
| xlsxnetease-youdao/LobsterAI | Skill | 6.2k | yesterday | MIT | A | 96 | Claude Code, Codex |
| agent-officekawayiYokami/P-ai | Skill | 109 | today | GPL-3.0 | A | 42 | Claude Code, Codex |
| csv-analysiszjunlp/DataMind | Skill | 151 | 1mo ago | none | A | 44 | Claude Code, Codex |
| data-analysisbytedance/deer-flow | Skill | 85k | today | MIT | A | 69 | Claude Code, Codex |