agentsclimarketplace

Run2 13f fund analysis

Skill cxcscmu/SkillLearnBench/skills/b2-self-feedback-claude-sonnet-4-6/financial-analysis/run2_13f-fund-analysis

[COLM'26] SkillLearnBench is the first benchmark for evaluating continual learning methods that automatically generate agent skills.

Install
npx -y skills add cxcscmu/SkillLearnBench --skill run2_13f-fund-analysis

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Analyze fund AUM, holdings count, and cross-quarter investment changes from SEC 13F filings.

SKILL.md

2.1 KB, 578 tokens by cl100k_base, as published. Nobody here has run it

13F Fund Analysis (Improved)

Overview

Analyze individual fund holdings and compare changes between quarters.

Setup

  • Scripts: /root/.claude/skills/13f-analyzer/scripts/
  • Data format: /root/{quarter}/INFOTABLE.tsv, /root/{quarter}/COVERPAGE.tsv

Analyze Single Fund (AUM, holdings count)

python3 /root/.claude/skills/13f-analyzer/scripts/one_fund_analysis.py \
    --accession_number 0001037389-25-000064 \
    --quarter 2025-q3

Output fields:

  • Total number of holdings: all asset classes
  • Total AUM: in USD dollars (float)
  • Number of stock holdings: equities only
  • Total stock AUM: equity AUM only

Compare Fund Between Two Quarters

python3 /root/.claude/skills/13f-analyzer/scripts/one_fund_analysis.py \
    --quarter 2025-q3 \
    --accession_number 0001193125-25-282901 \
    --baseline_quarter 2025-q2 \
    --baseline_accession_number 0000950123-25-008343

Output: "Top 10 Buys" and "Top 10 Sells" ranked by Abs change (dollar value change).

IMPORTANT: holding_analysis.py Has a Bug

The script uses hardcoded /root/INFOTABLE.tsv (missing quarter subdirectory). Use this Python workaround instead:

import pandas as pd

quarter = '2025-q3'
cusip = '69608A108'
topk = 3

infotable = pd.read_csv(f'/root/{quarter}/INFOTABLE.tsv', sep='\t', dtype=str)
infotable['VALUE'] = infotable['VALUE'].astype(float)
holding_details = infotable[infotable['CUSIP'] == cusip]

top = (
    holding_details.groupby('ACCESSION_NUMBER')
    .agg(TOTAL_VALUE=('VALUE', 'sum'))
    .sort_values('TOTAL_VALUE', ascending=False)
    .head(topk)
)

coverpage = pd.read_csv(f'/root/{quarter}/COVERPAGE.tsv', sep='\t', dtype=str)

for idx, (accession_number, row) in enumerate(top.iterrows()):
    fund_info = coverpage[coverpage['ACCESSION_NUMBER'] == accession_number]
    fund_name = fund_info['FILINGMANAGER_NAME'].values[0] if not fund_info.empty else 'Unknown'
    print(f'Rank {idx+1}: {fund_name} | Value = {row["TOTAL_VALUE"]:.2f}')

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 327,132. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.