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/portfolio-analysisnpx skills add cxcscmu/SkillLearnBench --skill portfolio-analysisgit 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/portfolio-analysis)<a href="https://agentmods.dev/skills/cxcscmu/skilllearnbench/portfolio-analysis"><img src="https://agentmods.dev/badge/skills/cxcscmu/skilllearnbench/portfolio-analysis.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.00018 | $0.02371 |
| Opus 5 | $0.00009 | $0.01185 |
| Sonnet 5 | $0.00004 | $0.00474 |
| Haiku 4.5 | $0.00002 | $0.00237 |
Grade A, and why
portfolio-analysis 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 — 282 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Portfolio Analysis for Hedge Funds
Overview
Portfolio analysis involves extracting fund-level information (AUM, total holdings, composition) from 13-F filings and comparing across time periods.
Key Metrics
1. Assets Under Management (AUM)
Location: SUMMARYPAGE.tsv
import pandas as pd
def get_fund_aum(accession_number, summarypage_df):
"""
Extract AUM for a specific fund
"""
fund_summary = summarypage_df[
summarypage_df['ACCESSION_NUMBER'] == accession_number
]
# Look for AUM-related fields in the data
# Common field names: AUM, ASSETS_UNDER_MANAGEMENT, TOTALASSETS, etc.
# Check available columns first
available_cols = fund_summary.columns.tolist()
print(f"Available columns: {available_cols}")
# If found, extract and convert to numeric
for col in available_cols:
if 'AUM' in col.upper() or 'ASSET' in col.upper() or 'TOTAL' in col.upper():
try:
aum_value = pd.to_numeric(
fund_summary[col].iloc[0],
errors='coerce'
)
return aum_value
except:
continue
return None
# Usage
q3_summary = pd.read_csv('/root/2025-q3/SUMMARYPAGE.tsv', sep='\t')
aum = get_fund_aum('specific_accession_number', q3_summary)
2. Portfolio Holdings Count
def get_holdings_count(accession_number, infotable_df):
"""
Count the number of stocks held by a fund
"""
fund_holdings = infotable_df[
infotable_df['ACCESSION_NUMBER'] == accession_number
]
return len(fund_holdings)
# Usage
q3_infotable = pd.read_csv('/root/2025-q3/INFOTABLE.tsv', sep='\t')
holdings_count = get_holdings_count('specific_accession_number', q3_infotable)
print(f"Renaissance Technologies holds {holdings_count} stocks")
3. Portfolio Composition
def analyze_portfolio_composition(accession_number, infotable_df):
"""
Analyze fund's portfolio composition
"""
fund_holdings = infotable_df[
infotable_df['ACCESSION_NUMBER'] == accession_number
].copy()
# Ensure VALUE is numeric (in thousands)
fund_holdings['VALUE'] = pd.to_numeric(fund_holdings['VALUE'], errors='coerce')
# Calculate statistics
total_portfolio_value = fund_holdings['VALUE'].sum() * 1000 # Convert to dollars
num_holdings = len(fund_holdings)
avg_position = total_portfolio_value / num_holdings if num_holdings > 0 else 0
# Get top positions
top_10 = fund_holdings.nlargest(10, 'VALUE')[
['NAMEOFISSUER', 'CUSIP', 'VALUE', 'SSHPRNAMT']
]
top_10['VALUE_MILLIONS'] = top_10['VALUE'].astype(float) / 1000
return {
'total_value_dollars': total_portfolio_value,
'num_holdings': num_holdings,
'avg_position_dollars': avg_position,
'top_10_positions': top_10,
'concentration': (top_10['VALUE'].sum() / fund_holdings['VALUE'].sum() * 100)
}
# Usage
composition = analyze_portfolio_composition('accession_number', q3_infotable)
print(f"Total Portfolio Value: ${composition['total_value_dollars']:,.0f}")
print(f"Number of Holdings: {composition['num_holdings']}")
print(f"Top 10 Positions Concentration: {composition['concentration']:.2f}%")
print("\nTop 10 Positions:")
print(composition['top_10_positions'])
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 · 282 lines · 18 tokens per session scan A 4a3afa6c06ba
portfolio-analysis is a skill published in the GitHub repository cxcscmu/SkillLearnBench (82 stars, last pushed 1mo ago), licensed MIT. It adds 18 tokens to every session and 2,371 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
letta-guide
Read the official Letta documentation (docs.letta.com) through its cached, ETag-checked fetch route. Load before ANY docs.letta.com retrieval — answering how Letta works, what Letta (or you) can do, setting up providers, models, channels, skills, memory, schedules, permissions, self-hosting, pricing, or billing, AND…
portfolio
Cross-chain DeFi portfolio discovery, rebalancing suggestions, and NEAR Intent construction. Activates when the user pastes a wallet address or asks about yield/positions/rebalancing. Bootstraps a per-user "portfolio" project, aggregates positions across all the user's addresses inside one project, and offers a…
trader-setup
One-time onboarding for the financial trader workflow — real-time alerts, position-aware relevance, decision journaling with outcome tracking. After successful setup this skill is excluded from selection until the marker file is deleted.
agentsop-repo-map
Symbol-level code context for LLM coder-agents: tree-sitter extracts symbols, PageRank ranks them over the cross-file reference graph, and the top class/function signatures are fed to the LLM as a token-budgeted read-only map (not RAG, no vector index, human-auditable). Use when an agent must locate the right files in…
agentsop-context-scope-discipline
Coder-agent working-file budget discipline: keep the editable working set (files you /add into writable context) under 25k tokens, separate "read" from "edit", delegate breadth to a read-only repo-map, and drop files once edited. Use when an LLM coder-agent edits multiple files, when the working set must stay focused…
agentsop-observability-setup
Enhancement-overlay skill — the DECISION + WIRING layer for LM observability that the single-backend skills [[langsmith]], [[phoenix]], [[mlflow]] do NOT cover. Each of those installs one backend; none of them help you DECIDE which backend fits your stack/scale/budget, nor give you a one-line autolog that turns it on…