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 Bwkyd/wps-skills --skill wps-cn-calendargit clone --depth 1 https://github.com/Bwkyd/wps-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/bwkyd/wps-skills/wps-cn-calendar)<a href="https://agentmods.dev/skills/bwkyd/wps-skills/wps-cn-calendar"><img src="https://agentmods.dev/badge/skills/bwkyd/wps-skills/wps-cn-calendar/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/bwkyd/wps-skills/wps-cn-calendar"><img src="https://agentmods.dev/badge/skills/bwkyd/wps-skills/wps-cn-calendar.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.00107 | $0.02370 |
| Opus 5 | $0.00053 | $0.01185 |
| Sonnet 5 | $0.00021 | $0.00474 |
| Haiku 4.5 | $0.00011 | $0.00237 |
Grade A, and why
wps-cn-calendar 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 12d 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 — 225 lines — stays where its author put it; the contents beside it link to each section on GitHub.
中国日历/排班表生成器
生成含法定节假日+农历的日历表,以及排班/值班安排。
When to Use
- 生成月度/年度日历
- 制作员工排班表
- 制作值班安排表
- 查看法定节假日安排
- 用户说"做个日历""排班表""值班安排"
When NOT to Use
- 考勤统计 → 使用
wps-attendance - 项目排期 → 使用
wps-gantt
功能模块
[1] 月度日历 → 含农历、节假日标注
[2] 年度日历 → 12个月一览表
[3] 排班表 → 三班倒/两班倒/弹性
[4] 值班表 → 节假日/周末值班安排
工作流程
Step 1: 确认需求
- 类型:日历/排班/值班
- 时间范围:哪年哪月
- 排班模式(如需要):几班倒、人员名单
- 特殊安排(如需要):谁请假、谁优先
Step 2: 生成日历/排班表
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
from datetime import datetime, timedelta
import calendar
import os
# 2026年法定节假日(示例,需要每年更新)
HOLIDAYS_2026 = {
'2026-01-01': '元旦',
'2026-01-29': '除夕', '2026-01-30': '春节', '2026-01-31': '春节',
'2026-02-01': '春节', '2026-02-02': '春节', '2026-02-03': '春节',
'2026-02-04': '春节',
'2026-04-05': '清明', '2026-04-06': '清明', '2026-04-07': '清明',
'2026-05-01': '劳动节', '2026-05-02': '劳动节', '2026-05-03': '劳动节',
'2026-05-04': '劳动节', '2026-05-05': '劳动节',
'2026-05-31': '端午', '2026-06-01': '端午', '2026-06-02': '端午',
'2026-10-01': '国庆', '2026-10-02': '国庆', '2026-10-03': '国庆',
'2026-10-04': '国庆', '2026-10-05': '国庆', '2026-10-06': '国庆',
'2026-10-07': '国庆',
}
# 调休上班日
WORKDAYS_2026 = {'2026-01-25', '2026-02-08', '2026-10-10'}
def create_monthly_calendar(year, month, output_path=None):
"""生成月度日历"""
wb = Workbook()
ws = wb.active
ws.title = f"{year}年{month}月"
# 样式
header_fill = PatternFill('solid', fgColor='2C3E50')
weekend_fill = PatternFill('solid', fgColor='FADBD8')
holiday_fill = PatternFill('solid', fgColor='F5B7B1')
today_fill = PatternFill('solid', fgColor='AED6F1')
header_font = Font(name='微软雅黑', size=12, bold=True, color='FFFFFF')
# 标题
ws.merge_cells('A1:G1')
ws['A1'] = f'{year}年{month}月'
ws['A1'].font = Font(name='微软雅黑', size=18, bold=True)
ws['A1'].alignment = Alignment(horizontal='center')
# 星期头
weekdays = ['一', '二', '三', '四', '五', '六', '日']
for col, wd in enumerate(weekdays, 1):
cell = ws.cell(row=2, column=col, value=f'星期{wd}')
cell.font = header_font
cell.fill = header_fill
cell.alignment = Alignment(horizontal='center')
ws.column_dimensions[chr(64+col)].width = 14
# 日期
cal = calendar.Calendar(firstweekday=0)
row = 3
for week in cal.monthdatescalendar(year, month):
for col, date in enumerate(week, 1):
if date.month != month:
continue
date_str = date.strftime('%Y-%m-%d')
cell = ws.cell(row=row, column=col)
cell.value = date.day
cell.font = Font(name='微软雅黑', size=14)
cell.alignment = Alignment(horizontal='center', vertical='center')
ws.row_dimensions[row].height = 50
# 节假日标注
if date_str in HOLIDAYS_2026:
cell.fill = holiday_fill
note_cell = ws.cell(row=row, column=col)
note_cell.value = f"{date.day}\n{HOLIDAYS_2026[date_str]}"
note_cell.font = Font(name='微软雅黑', size=10)
note_cell.alignment = Alignment(horizontal='center',
vertical='center',
wrap_text=True)
elif date.weekday() >= 5 and date_str not in WORKDAYS_2026:
cell.fill = weekend_fill
row += 1
if not output_path:
output_path = f'{year}年{month}月日历.xlsx'
wb.save(output_path)
return os.path.abspath(output_path)
def create_shift_schedule(year, month, staff_list, shift_pattern='三班倒',
output_path=None):
"""生成排班表"""
wb = Workbook()
ws = wb.active
ws.title = f"{month}月排班"
shifts = {
'三班倒': ['早', '中', '晚', '休'],
'两班倒': ['白', '夜', '休', '休'],
'做五休二': ['班', '班', '班', '班', '班', '休', '休'],
}
pattern = shifts.get(shift_pattern, shifts['三班倒'])
# 表头
header_fill = PatternFill('solid', fgColor='2C3E50')
header_font = Font(name='微软雅黑', size=9, bold=True, color='FFFFFF')
shift_colors = {
'早': PatternFill('solid', fgColor='AED6F1'),
'白': PatternFill('solid', fgColor='AED6F1'),
'班': PatternFill('solid', fgColor='AED6F1'),
'中': PatternFill('solid', fgColor='F9E79F'),
'晚': PatternFill('solid', fgColor='D7BDE2'),
'夜': PatternFill('solid', fgColor='D7BDE2'),
'休': PatternFill('solid', fgColor='ABEBC6'),
}
days_in_month = calendar.monthrange(year, month)[1]
ws.cell(row=1, column=1, value='姓名').font = header_font
ws.cell(row=1, column=1).fill = header_fill
for d in range(1, days_in_month + 1):
date = datetime(year, month, d)
cell = ws.cell(row=1, column=d+1, value=f'{d}\n{["一","二","三","四","五","六","日"][date.weekday()]}')
cell.font = Font(name='微软雅黑', size=8, color='FFFFFF')
cell.fill = header_fill
cell.alignment = Alignment(horizontal='center', wrap_text=True)
ws.column_dimensions[chr(65+d) if d < 26 else 'A'].width = 4
# 排班
for i, name in enumerate(staff_list):
ws.cell(row=i+2, column=1, value=name).font = Font(name='微软雅黑', size=10)
for d in range(1, days_in_month + 1):
shift_idx = (d - 1 + i) % len(pattern)
shift = pattern[shift_idx]
cell = ws.cell(row=i+2, column=d+1, value=shift)
cell.alignment = Alignment(horizontal='center')
cell.font = Font(name='微软雅黑', size=9)
if shift in shift_colors:
cell.fill = shift_colors[shift]
if not output_path:
output_path = f'{year}年{month}月排班表.xlsx'
wb.save(output_path)
return os.path.abspath(output_path)
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 12d ago First seen · 225 lines · 107 tokens per session scan A 119cbfa16eff
wps-cn-calendar is a skill published in the GitHub repository Bwkyd/wps-skills (8 stars, last pushed 4mo ago), licensed MIT. It adds 107 tokens to every session and 2,370 once invoked, about $0.0005 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-31.
Other skills, from other repositories
acceptance-orchestrator
Use when a coding task should be driven end-to-end from issue intake through implementation, review, deployment, and acceptance verification with minimal human re-intervention.
stakeholder-communication
Communicate effectively with stakeholders across functions and seniority levels. Use this skill when writing status updates, preparing executive reviews, sharing technical decisions with non-technical audiences, managing up, communicating bad news, or designing the communication cadence for a project. Triggers on…
syndic
Gère un parc de copropriétés en France avec vue portfolio consolidée. Couvre administration, comptabilité (décret 2005, plan comptable copro, 5 annexes), assemblées générales (convocation, PV, notification), appels de fonds, travaux, fournisseurs, recouvrement d'impayés et transition de syndic. Maîtrise les majorités…
contact-cache
Track all identified/contacted people across strategies. CSV-backed contact database with dedup by LinkedIn URL or email. Prevents duplicate outreach when running strategies on a recurring cadence.
atlassian
Manage Jira issues and Confluence wiki pages in Atlassian Cloud. Use when: (1) searching/creating/updating Jira issues with JQL, (2) searching/reading/creating Confluence pages with CQL, (3) managing Jira workflows, transitions, and comments, (4) browsing Confluence spaces and page hierarchies. Supports OAuth 2.1 via…
beta-program-management
Running closed and open betas that produce real signal. Beta participant selection, structured feedback collection, beta-to-GA decision criteria, and the difference between soft-launch (no structure, no signal), kitchen-sink (everyone in, no actionable feedback), and structured beta (calibrated cohort, intentional…