Cafci logo

Cafci

Community
gauss314
cafci

Datos de fondos comunes de inversion argentinos via CAFCI (Camara Argentina de Fondos Comunes de Inversion). Combina catalogo JSON (1152 fondos, 4615 clases, fees, IDs, metadata), snapshot diario XLSX (VCP, patrimonio, market share, variaciones), ficha individual markdown (rendimientos TNA por periodo) y composicion de cartera (top activos). Sin API key.

Overview

Publishergauss314
Repositoryskills
Skill namecafci
Stars
250
Forks
35
Bundled files
2
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 2 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by gauss314 on GitHub. Read the source before you install it.

Installation

Install the Cafci AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/gauss314/skills/tree/main/skills/cafci
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/gauss314/skills.git /tmp/skills
mkdir -p .claude/skills
cp -r /tmp/skills/skills/cafci .claude/skills/cafci
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Cafci in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Cafci on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Cafci is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

CAFCI — Fondos Comunes de Inversion Argentinos

Skill para consultar informacion publica de fondos comunes de inversion en Argentina via las 4 fuentes oficiales de CAFCI (Camara Argentina de Fondos Comunes de Inversion).

Cubre 1152 fondos y 4615 clases activas al 2026-06: Money Market, Renta Fija, Renta Variable, Renta Mixta, PyMes, Retorno Total, Infraestructura, Fondos Cerrados, ASG, RG900.


⚠️ Aviso Legal

  • API publica sin documentacion oficial. Los endpoints pueden cambiar sin aviso (como paso con la API REST anterior, discontinuada en 2026-04).
  • Respetar terminos de uso del CAFCI.
  • Los datos son delayed (cierre del dia habil, ~18hs ART).
  • Para uso comercial intensivo, contactar al CAFCI para feeds oficiales.
  • Rendimientos pasados no garantizan rendimientos futuros.

📌 Importante: API REST anterior DISCONTINUADA

La API REST api.pub.cafci.org.ar/tipo-renta, /fondo/{id}, /estadisticas/... fue discontinuada en 2026-04 (HTTP 403 "Route not allowed"). El unico path que sigue activo en ese host es /pb_get.

Esta skill usa las 4 fuentes alternativas que la reemplazaron:

  1. /consulta-de-fondos.json (catalogo completo)
  2. /pb_get (XLSX diario)
  3. defuddle.md/.../fondos/{F}?clase={C} (ficha markdown)
  4. .../fondos/{F}?clase={C} (HTML para composicion de cartera)

Scripts

ScriptDescripcion
fetch_cafci.pyScript principal: todos los endpoints + funciones de consulta

Requiere: pip install openpyxl (para parsear el XLSX diario).


Uso rapido

bash
# ── DATASETS ENTEROS (con cache local diario) ──────────────────────────

# Catalogo completo: 1152 fondos, 4615 clases con IDs, honorarios, metadata
py scripts/fetch_cafci.py catalogo
py scripts/fetch_cafci.py catalogo -o catalogo.json    # guarda 2.7MB
py scripts/fetch_cafci.py catalogo --no-cache          # fuerza refetch

# Snapshot diario: VCP, patrimonio, variaciones (dia/mes/YTD/12m)
py scripts/fetch_cafci.py diario
py scripts/fetch_cafci.py diario -o diario.json
py scripts/fetch_cafci.py diario --no-cache

# ── CONSULTAS SOBRE EL CACHE ───────────────────────────────────────────

# Buscar fondo por nombre (parcial, case-insensitive)
py scripts/fetch_cafci.py buscar "ahorro"
py scripts/fetch_cafci.py buscar "delta"
py scripts/fetch_cafci.py buscar "renta fija"

# Resolver IDs (mas compacto: solo fondo_id, clase_id, nombres)
py scripts/fetch_cafci.py resolve "ieb estrategico"
py scripts/fetch_cafci.py resolve "1810"

# Top N por patrimonio en una categoria del diario
py scripts/fetch_cafci.py top "Mercado de Dinero Peso Argentina"
py scripts/fetch_cafci.py top "Mercado de Dinero Peso Argentina" --limit 20
py scripts/fetch_cafci.py top "Renta Variable Peso Argentina"
py scripts/fetch_cafci.py top "Renta Fija Peso Argentina" --limit 5

# ── FICHAS INDIVIDUALES ────────────────────────────────────────────────

# Ficha markdown (rendimientos TNA: 7d/1m/90d/180d/YTD/12m + datos del fondo)
py scripts/fetch_cafci.py ficha 304 308              # 1810 Ahorro
py scripts/fetch_cafci.py ficha 1717 5772            # otro fondo
py scripts/fetch_cafci.py ficha 304 308 -o ficha.md  # guarda markdown

# Composicion de cartera (top activos + porcentaje)
py scripts/fetch_cafci.py cartera 304 308
py scripts/fetch_cafci.py cartera 1717 5772

# Ficha COMPLETA todo-en-uno (combina catalogo + diario + ficha + cartera)
py scripts/fetch_cafci.py fondo 304 308
py scripts/fetch_cafci.py fondo 304 308 -o 1810_ahorro_completo.json

# ── COMBINADO ──────────────────────────────────────────────────────────

# Catalogo + diario juntos (sin fichas individuales)
py scripts/fetch_cafci.py all -o cafci_snapshot.json

# ── OUTPUT ─────────────────────────────────────────────────────────────

# Modo silencioso (solo JSON/markdown, sin logs)
py scripts/fetch_cafci.py top "Mercado de Dinero Peso Argentina" -q

Endpoints disponibles

ModoDataURL
catalogoCatalogo: 1152 fondos, 4615 clases, IDs, honorarios, metadataGET /consulta-de-fondos.json
diarioSnapshot diario: VCP, patrimonio, market share, variacionesGET /pb_get (XLSX)
ficha FONDO CLASEFicha markdown: rendimientos TNA por periodoGET defuddle.md/.../fondos/{F}?clase={C}
cartera FONDO CLASEComposicion de cartera (top activos + %)GET .../fondos/{F}?clase={C} (HTML)
buscar QUERYBuscar fondos por nombre parcial(local, sobre catalogo)
resolve QUERYResolver fondoId/claseId desde nombre(local, sobre catalogo)
top CATEGORIATop N por patrimonio en una categoria(local, sobre diario)
fondo FONDO CLASEFicha completa todo-en-uno (combina los 4 endpoints)(local + 4 requests)
allSnapshot catalogo + diario(local + 2 requests)

Total: 4 endpoints HTTP + 5 funciones de consulta sobre cache.


Cache local

Los datasets pesados (catalogo + diario) se cachean una vez por dia en el directorio temporal del sistema:

$TMP/cafci-catalog-YYYY-MM-DD.json    (~2.7 MB)
$TMP/cafci-daily-YYYY-MM-DD.json      (~1-2 MB)
  • Windows: C:\Users\<user>\AppData\Local\Temp\
  • Linux/Mac: /tmp/

Si vas a hacer multiples consultas en el dia (typical workflow), reusan el cache automaticamente. Forzar refetch con --no-cache.


Tipos de renta soportados

TipoCantidad fondos
Renta Fija542
Renta Mixta271
Mercado de Dinero96
Renta Variable76
PyMes65
Retorno Total42
Infraestructura23
Fondos Cerrados22
ASG10
RG9005

Categorias del DIARIO (para top)

Las categorias del diario combinan tipo_renta + moneda + region como string. Ejemplos comunes:

CategoriaCobertura
Renta Variable Peso ArgentinaAcciones argentinas
Mercado de Dinero Peso ArgentinaMoney Market $
Renta Fija Peso ArgentinaBonos $
Renta Fija Dolar Estadounidense ArgentinaBonos USD argentinos
Renta Mixta Peso ArgentinaFondos mixtos $
Retorno Total Peso ArgentinaTotal return $

Para ver lista completa: py scripts/fetch_cafci.py diario -q | jq '.categorias'


Consideraciones tecnicas

Datos devueltos por catalogo

Top-level:

CampoDescripcion
generated_atTimestamp ISO del catalogo.
total_fondos, total_clasesContadores.
filtrosCatalogos de enums: tipo_renta, region, moneda, benchmark, duration, horizonte, sociedad_gerente, tipo_dinero, tipo_renta_mixta.
fondos[]Array de fondos.

Cada fondos[] tiene id, nombre, codigo_cnv, estado, objetivo, tipo_dinero, valuacion, dias_liquidacion, inicio, sociedad_gerente, sociedad_depositaria, moneda, tipo_renta, region, duration, benchmark, horizonte y clases[].

Cada clases[] tiene id, nombre, moneda, inversion_minima, honorarios (ingreso, rescate, transferencia, administracion_gerente, administracion_depositaria, gasto_ordinario_gestion), suscripcion, liquidez, rg384, log_abierto, ticker_bloomberg, ticker_isin.

⚠️ honorarios.* son strings (no floats). Castear con float() antes de comparar.

Datos devueltos por diario

json
{
  "fecha_reporte": "2026-06-04",
  "categorias": ["Renta Variable Peso Argentina", ...],
  "fondos": [
    {
      "nombre": "Allaria Equity Selection - Clase A",
      "categoria": "Renta Variable Peso Argentina",
      "moneda": "ARS",
      "region": "Arg",
      "horizonte": "Cor",
      "fecha": "2026-06-04",
      "vcp_actual": 1642.85,
      "vcp_anterior": 1628.345,
      "variacion_dia_pct": 0.891,
      "vcp_reexp_pesos": 1642.85,
      "variacion_mes_pct": -1.181,
      "variacion_ytd_pct": 11.939,
      "variacion_12m_pct": 61.542,
      "cantidad_cuotapartes": 1276470413.29,
      "patrimonio": 2097049572.01,
      "market_share": 0.107,
      "depositaria": "Banco Comafi S.A.",
      "codigo_cnv": "1603"
    }
  ]
}

Datos devueltos por cartera

json
{
  "fondo_id": 304,
  "clase_id": 308,
  "fecha_cartera": "15/05/2026",
  "composicion": [
    {"nombre": "Cta Cte $ Rem Bco Credico", "porcentaje": 17.4},
    {"nombre": "Pzo Fi $ Bco Nacion", "porcentaje": 14.8},
    ...
    {"nombre": "Resto de Activos", "porcentaje": 29.2}
  ]
}

CAFCI publica solo los top ~14 activos + "Resto de Activos" agrupado. La fecha de cartera tiene delay de ~2-3 semanas vs el diario.

Datos devueltos por fondo (todo-en-uno)

json
{
  "meta": { ...del catalogo... },
  "diario": { ...del XLSX... },
  "ficha_md": "...markdown defuddle...",
  "cartera": { ...composicion... }
}

Workflows recomendados

A) Top N por patrimonio con fees:

  1. top "<categoria>" --limit N → lista de fondos
  2. Para cada nombre, resolve para conseguir fondo_id, clase_id
  3. Buscar honorarios en catalogo por clases[].nombre exacto

B) Ficha completa de un fondo:

  1. resolve "<query>" → conseguir IDs
  2. fondo FONDO_ID CLASE_ID → todo-en-uno

C) Cuando el usuario no especifica clase:

  • Usar buscar o resolve y mostrar las clases disponibles
  • Si hay una sola, continuar automaticamente con esa

Flags

FlagDescripcion
--limit NCantidad de resultados (top). Default: 10
--no-cacheForzar refetch de catalogo/diario (ignorar cache local)
-o archivoGuardar output a archivo JSON o markdown
-q / --quietModo silencioso (solo JSON/markdown, sin logs)

Rate limiting

No hay rate limiting documentado. Recomendado:

  • Minimo 0.3 segundos entre requests a CAFCI.
  • Para defuddle.md (proxy externo), esperar mas si hay timeouts.
  • Para batches grandes, usar pool de concurrencia max 5.

Manejo de errores

StatusCausas tipicas
200OK
403 Route not allowedPath discontinuado de la API REST anterior
403 (en /pb_get)Faltan headers de browser (Origin, Referer) — el script ya los envia
404URL mal formada o IDs inexistentes
Timeout en defuddle.mdProxy externo lento — reintentar

Encoding

UTF-8 valido. Las consolas Windows muestran ? para acentos pero los archivos UTF-8 se guardan correctamente (el script usa ensure_ascii=False).


Estructura del skill

skills/cafci/
├── SKILL.md                          # Este archivo (guia rapida)
├── references/
│   └── REFERENCE.md                  # Documentacion completa de los 4 endpoints + cache
└── scripts/
    └── fetch_cafci.py                # Script principal

Documentacion detallada: Consultar references/REFERENCE.md para schemas JSON completos, tablas de campos exhaustivas, codigos de tipo_renta/region/horizonte/moneda, cache local, manejo de errores y consideraciones tecnicas.

Inspirado en: ferminrp/agent-skills/cafci-fondos-comunes-argentina — esta implementacion porta el mismo diseño de 4 fuentes a la arquitectura SKILL.md / references/REFERENCE.md / scripts/fetch_*.py del repo.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Cafci AI skill do?

Datos de fondos comunes de inversion argentinos via CAFCI (Camara Argentina de Fondos Comunes de Inversion). Combina catalogo JSON (1152 fondos, 4615 clases, fees, IDs, metadata), snapshot diario XLSX (VCP, patrimonio, market share, variaciones), ficha individual markdown (rendimientos TNA por periodo) y composicion de cartera (top activos). Sin API key.

Why use Cafci on TypingMind?

Because you install it once and use it with any model. Cafci is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Cafci in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/gauss314/skills/tree/main/skills/cafci. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Cafci?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Cafci?

As many as you like. As long as a model supports skills, you can use Cafci with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Cafci AI skill free?

Yes. It is published on GitHub by gauss314 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇