agentsclimarketplace

Unicorn python

Skill andrey-learning-machines/swe-harness/plugins/swe-harness/skills/unicorn-python

Portable SWE harness plugin for Codex and Claude Code

Install
npx -y skills add andrey-learning-machines/swe-harness --skill unicorn-python

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

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Guides Python development with modern idioms, tooling, and project structure. ALWAYS trigger on "python project", "pyproject.toml", "ruff", "mypy", "pytest", "poetry", "python setup", "type hints", "pydantic", "dataclass", "async python", "asyncio", "python anti-pattern", "python best practices", "python tooling", "python lint". Use when setting up Python projects, configuring tooling, choosing data modeling approaches, or writing tests. Different from testing skill which covers general test strategy; this covers Python-specific pytest patterns and tooling configs.

SKILL.md

5.6 KB, as published. Nobody here has run it

<!-- Last reviewed: 2026-03 -->

Python Domain Skill

Modern Type Hints (3.10+)

# Union with | operator
def process(value: int | str | None) -> dict[str, int]: ...

# Type aliases
type UserID = int
type Config = dict[str, str | int | bool]

# See references/type-hints-advanced.md for:
# - Generics and TypeVars
# - Protocols (structural typing)
# - Function overloading

Testing with Pytest

# Fixtures
@pytest.fixture
def sample_user():
    return {"name": "Alice", "email": "[email protected]"}

# Parametrize
@pytest.mark.parametrize("input,expected", [
    (0, 0), (1, 1), (2, 4),
])
def test_square(input, expected):
    assert input ** 2 == expected

# Mock with pytest-mock
def test_api(mocker):
    mock_get = mocker.patch("requests.get")
    mock_get.return_value.json.return_value = {"status": "ok"}
    result = fetch_data()
    assert result["status"] == "ok"

Coverage target: 80%+

pytest --cov=myapp --cov-report=term-missing --cov-fail-under=80

See references/testing-pytest.md for advanced fixtures, mocking patterns, markers, plugins.

Tooling

Ruff (Linting + Formatting)

Replaces Black, isort, flake8, pyupgrade.

ruff check --fix . && ruff format .
# pyproject.toml
[tool.ruff]
line-length = 88
target-version = "py310"

[tool.ruff.lint]
select = ["E", "W", "F", "I", "N", "UP", "B", "C4", "SIM"]
ignore = ["E501"]

[tool.ruff.format]
quote-style = "double"

Mypy (Type Checking)

[tool.mypy]
python_version = "3.10"
strict = true
warn_return_any = true
disallow_untyped_defs = true

Poetry (Dependency Management)

poetry init
poetry add requests
poetry add --group dev pytest pytest-cov ruff mypy
poetry install
poetry run pytest

See references/tooling-config.md for complete ruff rule sets, mypy options, pre-commit hooks, CI/CD.

Async Programming

# Concurrent execution
async def fetch_all(urls: list[str]) -> list[dict]:
    return await asyncio.gather(*[fetch_data(url) for url in urls])

# Async context manager
class AsyncDatabase:
    async def __aenter__(self):
        self.connection = await connect()
        return self

    async def __aexit__(self, *args):
        await self.connection.close()

See references/async-patterns.md for task management, semaphores, queues, error handling, pitfalls.

Data Modeling

Use caseChooseWhy
Internal data, simple containers@dataclassStdlib, fast, no deps
Performance-critical, immutable@dataclass(frozen=True, slots=True)Minimal overhead
External/untrusted data, APIspydantic.BaseModelAuto-validation, serialization
Config from environmentpydantic_settings.BaseSettingsEnv var parsing, type coercion
# Dataclass: internal data
@dataclass(frozen=True)
class Point:
    x: float
    y: float

# Pydantic: external data with validation
class UserCreate(BaseModel):
    name: str = Field(..., min_length=1, max_length=100)
    email: EmailStr
    age: int = Field(..., ge=0, le=150)

    @field_validator("email")
    @classmethod
    def normalize_email(cls, v: str) -> str:
        return v.lower().strip()

See references/dataclasses-pydantic.md for advanced features, nested models, settings, JSON schema.

Anti-patterns Quick Reference

Anti-patternFix
Mutable default def f(x=[])def f(x=None) then x = x or []
Bare except:except SpecificError as e:
== None / == Trueis None / is True
Modify list while iteratingList comprehension filter
f = open() without withwith open() as f:
String concat in loop +="".join(...)
Manual index counterenumerate()
type(x) == listisinstance(x, list)
print() debugginglogging.getLogger(__name__)
Star imports from x import *Explicit imports

Project Setup Checklist

# 1. Initialize
poetry init
poetry add <dependencies>
poetry add --group dev pytest pytest-cov ruff mypy pre-commit

# 2. Configure pyproject.toml
# [tool.ruff], [tool.mypy], [tool.pytest.ini_options]

# 3. Install hooks
pre-commit install

# 4. Full quality check
ruff check --fix . && ruff format . && mypy . && pytest --cov=myapp --cov-fail-under=80

Commands

ruff format . && ruff check --fix .                              # Format + lint
mypy .                                                           # Type check
pytest --cov=myapp --cov-report=term-missing --cov-fail-under=80 # Test + coverage

Reference Files

  • references/type-hints-advanced.md - Generics, Protocols, TypeVars, overloads, TypedDict
  • references/async-patterns.md - Task management, queues, synchronization, performance
  • references/testing-pytest.md - Fixtures, parametrize, mocking, markers, plugins
  • references/tooling-config.md - ruff, mypy, poetry, pre-commit, bandit configs
  • references/dataclasses-pydantic.md - Data modeling, validation, serialization, settings

Keep looking

Skills are one crate of 328,083. 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.