소스 정보
- 저장소
- the-perfect-developer/the-perfect-opencode
- 최근 소스 활동
- 2026년 2월 20일 18:00
- 감지된 SKILL.md 언어
- 영어
- 스타
- 11
- 포크
- 2
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/the-perfect-developer/the-perfect-opencode --skill python명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
This skill should be used when the user asks to "optimize a website for SEO", "improve search engine rankings", "apply SEO best practices", "do on-page SEO", or needs guidance on technical SEO, keyword research, content optimization, or link building strategies.
This skill should be used when the user asks to "integrate GitHub Copilot into an app", "use the Copilot SDK", "build a Copilot-powered agent", "embed Copilot in a service", or needs guidance on the GitHub Copilot SDK for Python, TypeScript, Go, or .NET.
This skill should be used when the user asks to "evaluate an implementation", "run the zen evaluation workflow", "check if the plan was properly implemented", "review implementation against a plan", or needs to assess implementation quality and surface improvement suggestions after a zen build cycle.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | python |
| description | Apply Python style guide conventions to code |
| license | CC-BY-3.0 |
| compatibility | opencode |
| metadata | {"language":"python","source":"https://google.github.io/styleguide/pyguide.html","audience":"developers"} |
I help you write Python code that follows professional style guide conventions. This includes:
Use this skill when:
module_name.py (lowercase with underscores)package_name (lowercase, no underscores preferred)ClassName (PascalCase)function_name() (lowercase with underscores)variable_name (lowercase with underscores)CONSTANT_NAME (uppercase with underscores)_private_var (leading underscore)_internal_global (leading underscore)__secret_var (double leading underscore for name mangling)Important: For strongly private attributes that should be protected via name mangling, always use double underscore prefix:
class MyClass:
def __init__(self):
# Public attribute
self.public_var: str = "visible"
# Protected attribute (convention only)
self._protected_var: str = "use with care"
# Private attribute (name mangled to _MyClass__secret)
self.__secret: str = "truly private"
Use full package paths:
# Good
from absl import flags
from doctor.who import jodie
# Bad
import jodie # Ambiguous
Import order:
Always use triple-quoted strings """ format.
Function docstring template:
def fetch_smalltable_rows(
table_handle: smalltable.Table,
keys: Sequence[bytes | str],
require_all_keys: bool = False,
) -> Mapping[bytes, tuple[str, ...]]:
"""Fetches rows from a Smalltable.
Retrieves rows pertaining to the given keys from the Table instance
represented by table_handle. String keys will be UTF-8 encoded.
Args:
table_handle: An open smalltable.Table instance.
keys: A sequence of strings representing the key of each table
row to fetch. String keys will be UTF-8 encoded.
require_all_keys: If True only rows with values set for all keys will be
returned.
Returns:
A dict mapping keys to the corresponding table row data
fetched. Each row is represented as a tuple of strings. For
example:
{b'Serak': ('Rigel VII', 'Preparer'),
b'Zim': ('Irk', 'Invader'),
b'Lrrr': ('Omicron Persei 8', 'Emperor')}
Returned keys are always bytes. If a key from the keys argument is
missing from the dictionary, then that row was not found in the
table (and require_all_keys must have been False).
Raises:
IOError: An error occurred accessing the smalltable.
"""
Class docstring template:
class SampleClass:
"""Summary of class here.
Longer class information...
Longer class information...
Attributes:
likes_spam: A boolean indicating if we like SPAM or not.
eggs: An integer count of the eggs we have laid.
"""
def __init__(self, likes_spam: bool = False):
"""Initializes the instance based on spam preference.
Args:
likes_spam: Defines if instance exhibits this preference.
"""
self.likes_spam = likes_spam
self.eggs = 0
Module docstring template:
"""A one-line summary of the module or program, terminated by a period.
Leave one blank line. The rest of this docstring should contain an
overall description of the module or program. Optionally, it may also
contain a brief description of exported classes and functions and/or usage
examples.
Typical usage example:
foo = ClassFoo()
bar = foo.function_bar()
"""
Always add type hints to function signatures:
def func(a: int) -> list[int]:
return [a * 2]
# For variables when type isn't obvious
a: SomeType = some_func()
# Use modern syntax (Python 3.10+)
def process(data: str | None = None) -> dict[str, int]:
pass
Important: Use capitalized type hints from typing module instead of built-in lowercase types:
from typing import Dict, List, Set, Tuple, Optional
# Good - using typing module
def process_users(users: List[str]) -> Dict[str, int]:
return {user: len(user) for user in users}
def get_config() -> Dict[str, List[int]]:
return {"ports": [8080, 8081]}
# Good - with Optional
def find_user(user_id: int) -> Optional[str]:
return None
# Bad - using built-in lowercase types (avoid)
def process_users(users: list[str]) -> dict[str, int]:
return {user: len(user) for user in users}
Note: While Python 3.9+ supports lowercase list, dict, etc., using the typing module variants (List, Dict) is preferred for consistency and broader compatibility.
# Good
foo_bar(
self, width, height, color='black', design=None, x='foo',
emphasis=None, highlight=0
)
# Good
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong'):
pass
# Bad - backslash continuation
if width == 0 and height == 0 and \
color == 'red' and emphasis == 'strong':
pass
# Good
def connect_to_next_port(self, minimum: int) -> int:
"""Connects to the next available port.
Args:
minimum: A port value greater or equal to 1024.
Returns:
The new minimum port.
Raises:
ConnectionError: If no available port is found.
"""
if minimum < 1024:
raise ValueError(f'Min. port must be at least 1024, not {minimum}.')
port = self._find_next_port(minimum)
if port is None:
raise ConnectionError(
f'Could not connect to service on port {minimum} or higher.')
return port
Never use mutable objects as default values:
# Good
def foo(a, b: list[int] | None = None):
if b is None:
b = []
# Bad
def foo(a, b: list[int] = []):
pass
Use implicit false when possible:
# Good
if not users:
print('no users')
if foo:
bar()
# Check for None explicitly
if x is None:
pass
# Bad
if len(users) == 0:
print('no users')
if foo != []:
bar()
Keep them simple - optimize for readability:
# Good
result = [mapping_expr for value in iterable if filter_expr]
# Good
result = [
is_valid(metric={'key': value})
for value in interesting_iterable
if a_longer_filter_expression(value)
]
# Bad - multiple for clauses
result = [(x, y) for x in range(10) for y in range(5) if x * y > 10]
Important: Always use underscore prefix for loop variables when you don't use the variable itself:
# Good - using underscore when variable is not used
for _user in users:
print("Processing a user")
send_notification()
for _item in items:
count += 1
# Good - using the variable
for user in users:
print(f"Processing {user.name}")
user.process()
# Bad - not using underscore when variable is unused
for user in users: # 'user' is never referenced
print("Processing a user")
This convention makes it immediately clear that the loop variable is intentionally unused.
pylint on all codedef do_PUT(self): # WSGI name, so pylint: disable=invalid-name
pass
Follow these fundamental principles from PEP 20 (The Zen of Python):
Access these at any time by running:
import this
Key principles to remember:
When you ask me to help with Python code, I will:
I prioritize readability and maintainability over brevity. When there's ambiguity, I'll ask clarifying questions about your specific use case.