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 agentmods add skills/cxcscmu/skilllearnbench/json-report-generationnpx skills add cxcscmu/SkillLearnBench --skill json-report-generationgit clone --depth 1 https://github.com/cxcscmu/SkillLearnBenchWrote 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/cxcscmu/skilllearnbench/json-report-generation)<a href="https://agentmods.dev/skills/cxcscmu/skilllearnbench/json-report-generation"><img src="https://agentmods.dev/badge/skills/cxcscmu/skilllearnbench/json-report-generation.svg" alt="Measured on agentmods" 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 | $0.00016 | $0.01134 |
| Opus 5 | $0.00008 | $0.00567 |
| Sonnet 5 | $0.00003 | $0.00227 |
| Haiku 4.5 | $0.00002 | $0.00113 |
Grade A, and why
json-report-generation 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 4d 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 — 141 lines — stays where its author put it; the contents beside it link to each section on GitHub.
JSON Report Generation Skill
Overview
Create, validate, and write JSON reports with proper formatting and schema verification.
Basic Report Structure
{
"pr": {
"total": 0,
"merged": 0,
"closed": 0,
"avg_merge_days": 0.0,
"top_contributor": "username"
},
"issue": {
"total": 0,
"bug": 0,
"resolved_bugs": 0
}
}
Field Specifications
pr.total: Integer count of all PRs created during periodpr.merged: Integer count of merged PRs (as of report date)pr.closed: Integer count of closed (non-merged) PRspr.avg_merge_days: Float rounded to 1 decimal placepr.top_contributor: String username of author with most PRsissue.total: Integer count of all issues created during periodissue.bug: Integer count of issues with 'bug' in any labelissue.resolved_bugs: Integer count of bug issues that were closed
Python Implementation
Basic Write
import json
report = {
"pr": {
"total": 125,
"merged": 95,
"closed": 20,
"avg_merge_days": 3.2,
"top_contributor": "alice"
},
"issue": {
"total": 45,
"bug": 18,
"resolved_bugs": 12
}
}
with open('/app/report.json', 'w') as f:
json.dump(report, f, indent=2)
With Validation
import json
def validate_report(report):
"""Validate report structure and types"""
required_keys = {'pr', 'issue'}
pr_keys = {'total', 'merged', 'closed', 'avg_merge_days', 'top_contributor'}
issue_keys = {'total', 'bug', 'resolved_bugs'}
assert set(report.keys()) == required_keys, "Missing top-level keys"
assert set(report['pr'].keys()) == pr_keys, "Missing PR keys"
assert set(report['issue'].keys()) == issue_keys, "Missing issue keys"
assert isinstance(report['pr']['total'], int), "PR total must be int"
assert isinstance(report['pr']['merged'], int), "PR merged must be int"
assert isinstance(report['pr']['closed'], int), "PR closed must be int"
assert isinstance(report['pr']['avg_merge_days'], (int, float)), "avg_merge_days must be numeric"
assert isinstance(report['pr']['top_contributor'], str), "top_contributor must be string"
assert isinstance(report['issue']['total'], int), "Issue total must be int"
assert isinstance(report['issue']['bug'], int), "Issue bug count must be int"
assert isinstance(report['issue']['resolved_bugs'], int), "resolved_bugs must be int"
return True
def write_report(report, filepath):
"""Write and validate report"""
validate_report(report)
with open(filepath, 'w') as f:
json.dump(report, f, indent=2)
print(f"Report written to {filepath}")
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.
- 4d ago First seen · 141 lines · 16 tokens per session scan A 8a969bde7143
json-report-generation is a skill published in the GitHub repository cxcscmu/SkillLearnBench (82 stars, last pushed 1mo ago), licensed MIT. It adds 16 tokens to every session and 1,134 once invoked, about $0.0001 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
ceo-setup
One-time onboarding for the executive/manager commitment workflow — delegation-heavy, meeting prep, decision capture, morning and evening digests. Creates a commitments project and installs two dashboard widgets. After successful setup this skill is excluded from selection until the marker file is deleted.
content-creator-setup
One-time onboarding for the content creator workflow — content pipeline stages, trend expiration, cross-platform cascades, heavy idea parking. After successful setup this skill is excluded from selection until the marker file is deleted.
idea-parking
Park interesting ideas for later consideration, resurface them periodically, and promote to commitments when ready.
routing-subtour-elimination
Subtour-elimination methods for TSP, VRP, pickup/dropoff routing, and routing MIPs with binary arc variables. Use when route-continuity constraints may permit disconnected cycles and the model needs MTZ constraints, flow-based connectivity constraints, DFJ subset cuts, or lazy/iterative subtour cuts.
scip-opt
SCIP optimization with PySCIPOpt. Use when facing an optimization problem with an objective, hard constraints, soft penalties, integer decisions, routing, assignment, scheduling, allocation, packing, capacity, inventory, or service-level rules. Prefer modeling and solving the problem with PySCIPOpt when it is…
ebcdic-overpunch-decoding
Reference for the EBCDIC "overpunch" / zoned-decimal sign convention where the units position of a numeric field is replaced with a letter that encodes both a digit and a sign. Useful when reading mainframe-style fixed-length tapes whose amount fields appear as digits followed by a letter (e.g. "0000000000123D" or…