Files
kis_trader/.cursor/rules/agent-shell-python-safety.mdc
2026-07-30 18:05:07 +09:00

48 lines
2.3 KiB
Plaintext

---
description: 에이전트 셸·Python 원라이너 — 문법 오류 코드 금지로 토큰/재실행 낭비 방지
alwaysApply: true
---
# 에이전트 셸 / Python 스니펫 안전 (토큰 절약)
대화에서 실제로 낭비된 패턴: **실행 전에 문법이 틀린 Python을 heredoc으로 돌림**
(예: `from X import Y if False else None` → `SyntaxError` → 재작성으로 턴·토큰 낭비).
## 1. 실행 전 문법 유효성 (필수)
- `python - <<'PY'` / `-c` / 임시 `.py` 를 **돌리기 전에** 문법이 맞는지 스스로 확인.
- 확신이 없으면 파일로 쓴 뒤 `python -m py_compile path.py` **1회**만 하고 실행.
- `SyntaxError` / `IndentationError` 나면 **원인 고친 뒤 1회만** 재실행. 같은 스니펫을 살짝만 바꿔 반복 금지.
## 2. 금지 패턴 (자주 나는 가짜 문법)
- `from module import name if cond else None` — **문법 불가**.
→ `import module as m` 후 `getattr(m, "name", None)` 또는 `try/except ImportError`.
- `from X import a, b if c` / 조건부 import를 `from` 한 줄에 섞기.
- 존재하지 않는 심볼을 **추측 import** (`get_scalp_grids` 등).
→ 먼저 `hasattr` / `dir` / Grep으로 실명 확인 후 import.
- heredoc 안에서 이전에 실패한 코드를 **거의 그대로** 다시 붙여 넣기.
## 3. 그리드·헬퍼 조회 스니펫 최소형
축 개수 세기 등은 아래처럼 **검증된 형태만** 사용 (조건부 from 금지):
```python
from kis_trader.backtest.param_search_breakout import _breakout_grids
import kis_trader.backtest.param_search_scalping as sc
bg = _breakout_grids()
print({m: len(a) for m, a in bg.items()})
fn = getattr(sc, "_scalp_grids", None)
print({m: len(a) for m, a in fn().items()} if callable(fn) else "no _scalp_grids")
```
시그니처를 모르면 `inspect.signature(fn)` **먼저** — `_tail_grids(mode)` 처럼 인자가 필요한데 `()`로 호출하지 말 것.
## 4. 토큰 절약 원칙
- “한 번에 여러 전략 import + 조건부 트릭”보다 **짧은 확정 코드 1회**.
- 실패 로그를 사용자에게 길게 반복 붙여 넣지 말 것. 고치고 결과만 보고.
- ImportError/AttributeError 시 비슷한 심볼명 추측 재실행 금지 → Grep 1회 (`invalidate_merged_env_cache` 등).
- 상세 절대규칙: `.cursorrules` CRITICAL §4.