Agent skill

Python Testing

by affaan-m in affaan-m/ECC

Estrategias de pruebas Python usando pytest, metodología TDD, fixtures, mocking, parametrización y requisitos de cobertura.

MITAuto-check passedTesting & QA

Install Python Testing

skills CLI
$ npx skills add affaan-m/ECC --skill python-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install affaan-m/ECC python-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .claude/skills && cp -r skills-src/docs/es/skills/python-testing .claude/skills/python-testing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
python-testing
GitHub stars
274k
Token cost
~3.3k tokens
SKILL.md length
355 words
Files
1
Skills in repo
657
Repo updated
First seen
Licence
MIT

At a glance

Estrategias de pruebas Python usando pytest, metodología TDD, fixtures, mocking, parametrización y requisitos de cobertura.

  • Works in 3 steps: ROJO: Escribir una prueba que falle para… → VERDE: Escribir el código mínimo para… → REFACTORIZAR: Mejorar el código…
  • Tasks that involve Unit testing
  • SKILL.md covers Cuándo Activar, Filosofía Central de Pruebas, Fundamentos de pytest and Fixtures, plus 4 more sections
  • Calls pytest

What it does

Python Testing is an agent skill from affaan-m/ECC. Estrategias de pruebas Python usando pytest, metodología TDD, fixtures, mocking, parametrización y requisitos de cobertura.

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Unit testing and Test-driven development. It works with Python and pytest. The repository describes itself as: The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond. The licence is MIT.

When your agent uses it

  • Tasks that involve Unit testing
  • Tasks that involve Test-driven development

Example prompts

  • “Use the python-testing skill to estrategia de pruebas Python usando pytest, metodología TDD, fixtures, mocking, parametrización y requisitos de…”
  • “/python-testing”

Requirements

  • Python 3

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. ROJO: Escribir una prueba que falle para el comportamiento deseado
  2. VERDE: Escribir el código mínimo para que la prueba pase
  3. REFACTORIZAR: Mejorar el código manteniendo las pruebas en verde

What it can do on your machine

Read from SKILL.md and the folder at commit ef648e0. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pytest

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Python Testing loads about 3.3k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 355 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~35
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from affaan-m/ECC at commit ef648e0, republished under its MIT licence (© affaan-m). 355 words, ~3,280 tokens.

Download SKILL.mdSave it as .claude/skills/python-testing/SKILL.md (or your agent's skills folder).
name
python-testing
description
Estrategias de pruebas Python usando pytest, metodología TDD, fixtures, mocking, parametrización y requisitos de cobertura.
origin
ECC

Patrones de Pruebas Python

Estrategias completas de pruebas para aplicaciones Python usando pytest, metodología TDD y buenas prácticas.

Cuándo Activar

  • Escribir código Python nuevo (seguir TDD: rojo, verde, refactorizar)
  • Diseñar suites de pruebas para proyectos Python
  • Revisar la cobertura de pruebas Python
  • Configurar infraestructura de pruebas

Filosofía Central de Pruebas

Desarrollo Guiado por Pruebas (TDD)

Siempre seguir el ciclo TDD:

  1. ROJO: Escribir una prueba que falle para el comportamiento deseado
  2. VERDE: Escribir el código mínimo para que la prueba pase
  3. REFACTORIZAR: Mejorar el código manteniendo las pruebas en verde
python
# Paso 1: Escribir prueba fallida (ROJO)
def test_add_numbers():
    result = add(2, 3)
    assert result == 5

# Paso 2: Escribir implementación mínima (VERDE)
def add(a, b):
    return a + b

# Paso 3: Refactorizar si es necesario (REFACTORIZAR)
Requisitos de Cobertura
  • Objetivo: 80%+ de cobertura de código
  • Rutas críticas: 100% de cobertura requerida
  • Usar pytest --cov para medir la cobertura
bash
pytest --cov=mypackage --cov-report=term-missing --cov-report=html

Fundamentos de pytest

Estructura Básica de Pruebas
python
import pytest

def test_addition():
    """Prueba la suma básica."""
    assert 2 + 2 == 4

def test_string_uppercase():
    """Prueba la conversión a mayúsculas."""
    text = "hello"
    assert text.upper() == "HELLO"

def test_list_append():
    """Prueba el append de lista."""
    items = [1, 2, 3]
    items.append(4)
    assert 4 in items
    assert len(items) == 4
Aserciones
python
# Igualdad
assert result == expected

# Desigualdad
assert result != unexpected

# Veracidad
assert result  # Truthy
assert not result  # Falsy
assert result is True  # Exactamente True
assert result is False  # Exactamente False
assert result is None  # Exactamente None

# Membresía
assert item in collection
assert item not in collection

# Comparaciones
assert result > 0
assert 0 <= result <= 100

# Verificación de tipo
assert isinstance(result, str)

# Prueba de excepción (enfoque preferido)
with pytest.raises(ValueError):
    raise ValueError("mensaje de error")

# Verificar mensaje de excepción
with pytest.raises(ValueError, match="entrada inválida"):
    raise ValueError("entrada inválida proporcionada")

Fixtures

Uso Básico de Fixtures
python
import pytest

@pytest.fixture
def sample_data():
    """Fixture que proporciona datos de ejemplo."""
    return {"name": "Alice", "age": 30}

def test_sample_data(sample_data):
    """Prueba usando el fixture."""
    assert sample_data["name"] == "Alice"
    assert sample_data["age"] == 30
Fixture con Setup/Teardown
python
@pytest.fixture
def database():
    """Fixture con setup y teardown."""
    # Setup
    db = Database(":memory:")
    db.create_tables()
    db.insert_test_data()

    yield db  # Proporcionar a la prueba

    # Teardown
    db.close()

def test_database_query(database):
    """Prueba operaciones de base de datos."""
    result = database.query("SELECT * FROM users")
    assert len(result) > 0
Alcances de Fixtures
python
# Alcance de función (por defecto) - se ejecuta por cada prueba
@pytest.fixture
def temp_file():
    with open("temp.txt", "w") as f:
        yield f
    os.remove("temp.txt")

# Alcance de módulo - se ejecuta una vez por módulo
@pytest.fixture(scope="module")
def module_db():
    db = Database(":memory:")
    db.create_tables()
    yield db
    db.close()

# Alcance de sesión - se ejecuta una vez por sesión de pruebas
@pytest.fixture(scope="session")
def shared_resource():
    resource = ExpensiveResource()
    yield resource
    resource.cleanup()
Fixture con Parámetros
python
@pytest.fixture(params=[1, 2, 3])
def number(request):
    """Fixture parametrizado."""
    return request.param

def test_numbers(number):
    """La prueba se ejecuta 3 veces, una por cada parámetro."""
    assert number > 0
Fixtures Autouse
python
@pytest.fixture(autouse=True)
def reset_config():
    """Se ejecuta automáticamente antes de cada prueba."""
    Config.reset()
    yield
    Config.cleanup()

def test_without_fixture_call():
    # reset_config se ejecuta automáticamente
    assert Config.get_setting("debug") is False
Conftest.py para Fixtures Compartidos
python
# tests/conftest.py
import pytest

@pytest.fixture
def client():
    """Fixture compartido para todas las pruebas."""
    app = create_app(testing=True)
    with app.test_client() as client:
        yield client

@pytest.fixture
def auth_headers(client):
    """Genera cabeceras de autenticación para pruebas de API."""
    response = client.post("/api/login", json={
        "username": "test",
        "password": "test"
    })
    token = response.json["token"]
    return {"Authorization": f"Bearer {token}"}

Parametrización

Parametrización Básica
python
@pytest.mark.parametrize("input,expected", [
    ("hello", "HELLO"),
    ("world", "WORLD"),
    ("PyThOn", "PYTHON"),
])
def test_uppercase(input, expected):
    """La prueba se ejecuta 3 veces con diferentes entradas."""
    assert input.upper() == expected
Múltiples Parámetros
python
@pytest.mark.parametrize("a,b,expected", [
    (2, 3, 5),
    (0, 0, 0),
    (-1, 1, 0),
    (100, 200, 300),
])
def test_add(a, b, expected):
    """Prueba la suma con múltiples entradas."""
    assert add(a, b) == expected
Parametrizar con IDs
python
@pytest.mark.parametrize("input,expected", [
    ("valid@email.com", True),
    ("invalid", False),
    ("@no-domain.com", False),
], ids=["valid-email", "missing-at", "missing-domain"])
def test_email_validation(input, expected):
    """Prueba validación de email con IDs legibles."""
    assert is_valid_email(input) is expected

Markers y Selección de Pruebas

Markers Personalizados
python
# Marcar pruebas lentas
@pytest.mark.slow
def test_slow_operation():
    time.sleep(5)

# Marcar pruebas de integración
@pytest.mark.integration
def test_api_integration():
    response = requests.get("https://api.example.com")
    assert response.status_code == 200

# Marcar pruebas unitarias
@pytest.mark.unit
def test_unit_logic():
    assert calculate(2, 3) == 5
Ejecutar Pruebas Específicas
bash
# Ejecutar solo pruebas rápidas
pytest -m "not slow"

# Ejecutar solo pruebas de integración
pytest -m integration

# Ejecutar pruebas de integración o lentas
pytest -m "integration or slow"
Configurar Markers en pytest.ini
ini
[pytest]
markers =
    slow: marca pruebas como lentas
    integration: marca pruebas como de integración
    unit: marca pruebas como unitarias

Mocking y Patching

Mocking de Funciones
python
from unittest.mock import patch, Mock

@patch("mypackage.external_api_call")
def test_with_mock(api_call_mock):
    """Prueba con API externa mockeada."""
    api_call_mock.return_value = {"status": "success"}

    result = my_function()

    api_call_mock.assert_called_once()
    assert result["status"] == "success"
Mocking de Excepciones
python
@patch("mypackage.api_call")
def test_api_error_handling(api_call_mock):
    """Prueba manejo de errores con excepción mockeada."""
    api_call_mock.side_effect = ConnectionError("Error de red")

    with pytest.raises(ConnectionError):
        api_call()

    api_call_mock.assert_called_once()
Mocking de Context Managers
python
@patch("builtins.open", new_callable=mock_open)
def test_file_reading(mock_file):
    """Prueba lectura de archivo con open mockeado."""
    mock_file.return_value.read.return_value = "contenido del archivo"

    result = read_file("test.txt")

    mock_file.assert_called_once_with("test.txt", "r")
    assert result == "contenido del archivo"
Usar Autospec
python
@patch("mypackage.DBConnection", autospec=True)
def test_autospec(db_mock):
    """Prueba con autospec para detectar mal uso de API."""
    db = db_mock.return_value
    db.query("SELECT * FROM users")

    db_mock.assert_called_once()
Mock de Propiedades
python
@pytest.fixture
def mock_config():
    """Crea un mock con una propiedad."""
    config = Mock()
    type(config).debug = PropertyMock(return_value=True)
    type(config).api_key = PropertyMock(return_value="test-key")
    return config

Pruebas de Código Asíncrono

Pruebas Async con pytest-asyncio
python
import pytest

@pytest.mark.asyncio
async def test_async_function():
    """Prueba función async."""
    result = await async_add(2, 3)
    assert result == 5
Fixture Async
python
@pytest.fixture
async def async_client():
    """Fixture async que proporciona cliente de prueba async."""
    app = create_app()
    async with app.test_client() as client:
        yield client

Pruebas de Excepciones

Probar Excepciones Esperadas
python
def test_divide_by_zero():
    """Prueba que dividir por cero lanza ZeroDivisionError."""
    with pytest.raises(ZeroDivisionError):
        divide(10, 0)

def test_custom_exception():
    """Prueba excepción personalizada con mensaje."""
    with pytest.raises(ValueError, match="entrada inválida"):
        validate_input("invalid")

Pruebas con tmp_path

python
def test_with_tmp_path(tmp_path):
    """Prueba usando el fixture de ruta temporal de pytest."""
    test_file = tmp_path / "test.txt"
    test_file.write_text("hello world")

    result = process_file(str(test_file))
    assert result == "hello world"
    # tmp_path se limpia automáticamente

Organización de Pruebas

Estructura de Directorio
tests/
├── conftest.py                 # Fixtures compartidos
├── __init__.py
├── unit/                       # Pruebas unitarias
│   ├── __init__.py
│   ├── test_models.py
│   ├── test_utils.py
│   └── test_services.py
├── integration/                # Pruebas de integración
│   ├── __init__.py
│   ├── test_api.py
│   └── test_database.py
└── e2e/                        # Pruebas end-to-end
    ├── __init__.py
    └── test_user_flow.py
Clases de Prueba
python
class TestUserService:
    """Agrupa pruebas relacionadas en una clase."""

    @pytest.fixture(autouse=True)
    def setup(self):
        """Setup se ejecuta antes de cada prueba en esta clase."""
        self.service = UserService()

    def test_create_user(self):
        """Prueba creación de usuario."""
        user = self.service.create_user("Alice")
        assert user.name == "Alice"

    def test_delete_user(self):
        """Prueba eliminación de usuario."""
        user = User(id=1, name="Bob")
        self.service.delete_user(user)
        assert not self.service.user_exists(1)

Buenas Prácticas

Show full SKILL.md (143 more words)Show less
HACER
  • Seguir TDD: Escribir pruebas antes que el código (rojo-verde-refactorizar)
  • Probar una sola cosa: Cada prueba debe verificar un único comportamiento
  • Usar nombres descriptivos: test_user_login_with_invalid_credentials_fails
  • Usar fixtures: Eliminar duplicación con fixtures
  • Mockear dependencias externas: No depender de servicios externos
  • Probar casos borde: Entradas vacías, valores None, condiciones de frontera
  • Apuntar a 80%+ de cobertura: Enfocarse en rutas críticas
  • Mantener pruebas rápidas: Usar markers para separar pruebas lentas
NO HACER
  • No probar implementación: Probar comportamiento, no internos
  • No usar condicionales complejos en pruebas: Mantener pruebas simples
  • No ignorar fallos de prueba: Todas las pruebas deben pasar
  • No probar código de terceros: Confiar en que las bibliotecas funcionan
  • No compartir estado entre pruebas: Las pruebas deben ser independientes

Configuración de pytest

pytest.ini
ini
[pytest]
testpaths = tests
python_files = test_*.py
python_classes = Test*
python_functions = test_*
addopts =
    --strict-markers
    --disable-warnings
    --cov=mypackage
    --cov-report=term-missing
    --cov-report=html
markers =
    slow: marca pruebas como lentas
    integration: marca pruebas como de integración
    unit: marca pruebas como unitarias

Ejecutar Pruebas

bash
# Ejecutar todas las pruebas
pytest

# Ejecutar archivo específico
pytest tests/test_utils.py

# Ejecutar prueba específica
pytest tests/test_utils.py::test_function

# Ejecutar con salida detallada
pytest -v

# Ejecutar con cobertura
pytest --cov=mypackage --cov-report=html

# Ejecutar solo pruebas rápidas
pytest -m "not slow"

# Ejecutar hasta el primer fallo
pytest -x

# Ejecutar últimas pruebas fallidas
pytest --lf

# Ejecutar pruebas con patrón
pytest -k "test_user"

# Ejecutar con depurador al fallar
pytest --pdb

Recuerda: Las pruebas también son código. Mantenlas limpias, legibles y mantenibles. Las buenas pruebas detectan bugs; las excelentes pruebas los previenen.

© affaan-m, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in docs/es/skills/python-testing of affaan-m/ECC.

Open the folder on GitHubat commit ef648e0

Compare with similar skills

Python Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Python Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Python Testing this skillaffaan-m/ECC274k—~3.3kAutomated safety check: PassMIT
Agent-Core Python TestingopenJiuwen-ai/agent-core441—~2.3kAutomated safety check: PassApache-2.0
Python Testing Patternsjh941213/my-cc-harness12616 repos~5.4kAutomated safety check: PassNone
TDD Guidealirezarezvani/claude-skills28k—~3.4kAutomated safety check: PassMIT
TDD GuideLeoYeAI/openclaw-master-skills2.2k—~1.4kAutomated safety check: PassMIT
TDD GuideaAAaqwq/AGI-Super-Team1052 repos~1.1kAutomated safety check: PassMIT

Similar skills

  • Agent-Core Python Testing

    openJiuwen-ai/agent-core

    Pytest patterns for the agent-core codebase: a red-green-refactor workflow, conftest fixtures, custom marks, monkeypatch and patch mocking, and async tests.

    441 GitHub stars~2.3k tokensUpdated 7 days ago
    Testing & QAAuto-check passed
  • Python Testing Patterns

    jh941213/my-cc-harness

    Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development.

    126 GitHub starsUsed in 16 repos~5.4k tokens
    Testing & QAAuto-check passed
  • TDD Guide

    alirezarezvani/claude-skills

    Test-driven development skill for writing unit tests, generating test fixtures and mocks, analyzing coverage gaps, and guiding red-green-refactor workflows across Jest, Pytest, JUnit, Vitest, and…

    28k GitHub stars~3.4k tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • TDD Guide

    LeoYeAI/openclaw-master-skills

    Test-driven development skill for writing unit tests, generating test fixtures and mocks, analyzing coverage gaps, and guiding red-green-refactor workflows across Jest, Pytest, JUnit, Vitest, and…

    2.2k GitHub stars~1.4k tokensUpdated 2 mo ago
    Testing & QAAuto-check passed
  • TDD Guide

    aAAaqwq/AGI-Super-Team

    Test-driven development workflow with test generation, coverage analysis, and multi-framework support

    105 GitHub starsUsed in 2 repos~1.1k tokens
    Testing & QAAuto-check passed
  • Python Testing

    xu-xiang/everything-claude-code-zh

    使用 pytest、TDD 方法论、固件(Fixtures)、模拟(Mocking)、参数化及覆盖率要求的 Python 测试策略。

    2k GitHub stars~3.9k tokensUpdated 7 mo ago
    Testing & QAAuto-check passed

More from affaan-m/ECC

All 657 skills in this repo
  • Skill Stocktake

    affaan-m/ECC

    Audits your installed Claude skills and commands for quality, with a quick mode for recently changed skills and a full mode that evaluates all of them through subagents.

    274k GitHub starsUsed in 5 repos~1.9k tokens
    Auto-check passed
  • Videodb

    affaan-m/ECC

    Ingest, index, search, edit, and monitor video and audio with the VideoDB Python SDK — upload from files, URLs, or RTSP feeds, build spoken and scene indexes with timestamped search and playable…

    274k GitHub starsUsed in 3 repos~3.5k tokens
    Auto-check: notes
  • Rules Distillation

    affaan-m/ECC

    Scans installed skills for principles that recur across them and proposes rule-file changes: append, revise, add a section, create a file or leave as covered.

    274k GitHub starsUsed in 2 repos~2.3k tokens
    Auto-check passed
  • Builds DRAFT counterparty agreements from one markdown template and a small JSON spec per party, with clauses picked by the party's role.

    274k GitHub stars~2.9k tokensUpdated 2 days ago
    Auto-check passed
  • Measures whether agents actually follow a skill, rule or agent definition by generating scenarios at three strictness levels and scoring tool-call traces.

    274k GitHub starsUsed in 1 repo~623 tokens
    Auto-check passed
  • Instinct-based learning system that observes sessions via hooks, creates atomic instincts with confidence scoring, and evolves them into skills/commands/agents.

    274k GitHub stars~3.5k tokensUpdated 2 days ago
    Auto-check passed

Works with

Categories

Questions about Python Testing

What does Python Testing do?

Estrategias de pruebas Python usando pytest, metodología TDD, fixtures, mocking, parametrización y requisitos de cobertura. Python Testing is an agent skill from affaan-m/ECC. Estrategias de pruebas Python usando pytest, metodología TDD, fixtures, mocking, parametrización y requisitos de cobertura.

When should I use Python Testing?

Python Testing fits situations like: tasks that involve Unit testing; tasks that involve Test-driven development.

How do I install Python Testing in Claude Code?

Run `npx skills add affaan-m/ECC --skill python-testing -a claude-code`. Or copy the skill folder (docs/es/skills/python-testing in affaan-m/ECC) into .claude/skills/python-testing in your project. Claude Code loads it when a task matches its description.

How do I install Python Testing in Codex?

Run `npx skills add affaan-m/ECC --skill python-testing -a codex`. Or copy the skill folder (docs/es/skills/python-testing in affaan-m/ECC) into .agents/skills/python-testing in your project. Codex loads it when a task matches its description.

Can I use Python Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add affaan-m/ECC --skill python-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/python-testing, .gemini/skills/python-testing, .github/skills/python-testing and .opencode/skills/python-testing in your project.

What does Python Testing need to run?

Going by SKILL.md and its folder, Python Testing needs the command-line tools its instructions call (pytest). Our summary lists: Python 3.

Does Python Testing access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Python Testing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Python Testing use?

Python Testing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Python Testing use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Python Testing?

Skills that share tags, products or a category with Python Testing: Agent-Core Python Testing (openJiuwen-ai/agent-core, 441 stars), Python Testing Patterns (jh941213/my-cc-harness, 126 stars), TDD Guide (alirezarezvani/claude-skills, 28k stars) and TDD Guide (LeoYeAI/openclaw-master-skills, 2.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Python Testing?

affaan-m (a GitHub user) maintains it in affaan-m/ECC, which has 274,360 GitHub stars. The repository holds 657 skills in this directory. The repository was last updated on October 5, 2026.

Source: affaan-m/ECC on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.