Install
$ agentstack add skill-andrey-learning-machines-swe-harness-unicorn-python ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
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": "alice@example.com"}
# 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 case | Choose | Why | |----------|--------|-----| | Internal data, simple containers | @dataclass | Stdlib, fast, no deps | | Performance-critical, immutable | @dataclass(frozen=True, slots=True) | Minimal overhead | | External/untrusted data, APIs | pydantic.BaseModel | Auto-validation, serialization | | Config from environment | pydantic_settings.BaseSettings | Env 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-pattern | Fix | |-------------|-----| | Mutable default def f(x=[]) | def f(x=None) then x = x or [] | | Bare except: | except SpecificError as e: | | == None / == True | is None / is True | | Modify list while iterating | List comprehension filter | | f = open() without with | with open() as f: | | String concat in loop += | "".join(...) | | Manual index counter | enumerate() | | type(x) == list | isinstance(x, list) | | print() debugging | logging.getLogger(__name__) | | Star imports from x import * | Explicit imports |
Project Setup Checklist
# 1. Initialize
poetry init
poetry add
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
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: andrey-learning-machines
- Source: andrey-learning-machines/swe-harness
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.