runtime.python Runtime observed

RunPython 신뢰 경계

dartlab RunPython 도구 안에서 무엇이 허용되고 무엇이 차단되는지 명시한다. 외부 클라이언트가 attach 한 상태에서도 신뢰 경계가 회색 지대 없이 분명하도록 SSOT.

이 스킬

RunPython 신뢰 경계

dartlab RunPython 도구 안에서 무엇이 허용되고 무엇이 차단되는지 명시한다. 외부 클라이언트가 attach 한 상태에서도 신뢰 경계가 회색 지대 없이 분명하도록 SSOT.

Runtime observed runtime.python

절차

실행 순서

  1. 1

    분석 의도를 1 문장으로 정의한다.

  2. 2

    허용 표면 안에서 코드를 작성한다 (dartlab API · polars · pathlib 읽기 · 안전 경로 쓰기).

  3. 3

    차단된 호출이 필요하면 해당 도구 (SaveArtifact 등) 로 대체한다.

  4. 4

    차단 에러를 받으면 메시지의 안내에 따라 코드를 수정한다.

예시

이런 질문이 들어오면 이 skill 을 쓴다

  • dartlab.Company('005930').show() 실행
  • polars 로 dataframe 가공
  • tempfile.gettempdir() 안에 임시 결과 저장

출력

기대 결과

  • emit_result 호출 결과
  • 차단 시 PermissionError 메시지

신뢰 모델

dartlab 의 RunPython 은 단일 사용자 로컬 신뢰 환경을 가정한다. 코드를 작성하는 주체는 (a) 사용자 자신이거나, (b) 사용자가 신뢰해서 attach 한 LLM 클라이언트다. sandbox 의 목적은 완전 격리 가 아니라 우발적/실수성 destructive 호출 차단 + 신뢰 경계 명시 다.

운영 환경이 외부 공유 (팀/공개 attach) 로 확장되면 본 신뢰 모델은 재검토 필요하다.

허용

  • dartlab API 전체dartlab.Company, dartlab.scan, dartlab.macro, dartlab.analysis, dartlab.story, dartlab.gather, dartlab.quant, dartlab.industry 등.
  • polars 전체pl.DataFrame, pl.Series, lazy frames, joins, window functions.
  • pathlib 읽기Path.read_text, Path.exists, Path.glob 등.
  • read mode open — 어디든 읽기 가능. 외부 본문 분석 use case 보존.
  • read-only os 모듈os.path.expanduser, os.path.join, os.environ.get, os.getcwd, os.listdir 등. 호출 가능 attr 만 차단되며 path/environ 은 통과.
  • import 자체import os, import subprocess 모두 OK. 차단은 호출 시점 만.
  • 안전 경로 쓰기 — 다음 prefix 안의 파일 쓰기 통과:
    • ~/.dartlab/ (사용자 dartlab home)
    • ./tmp/ (현재 작업 폴더 안)
    • /tmp/ (Unix 임시)
    • tempfile.gettempdir() (OS 표준 임시 — Windows %TEMP%)

차단

호출사유대안
os.system(...) / os.popen(...)shell 호출dartlab API 또는 polars
os.exec*(...) / os.spawn*(...)프로세스 교체/생성사용처 없음
os.kill(...)프로세스 종료사용처 없음
os.remove/unlink/rmdir/removedirs(...)파일/디렉토리 삭제사용처 없음 — 분석은 read-only
subprocess.run/Popen/call/check_*/get*(...)외부 프로세스 실행dartlab API 또는 SaveArtifact
shutil.rmtree/move/copytree(...)대량 파일 조작사용처 없음
socket.socket/create_connection/create_server(...)raw 소켓requests/httpx 같은 high-level
__import__('os'\|'subprocess'\|'shutil'\|'socket')우회 시도동일 차단
from os import system직접 import동일 차단
안전 경로 외 open(path, mode=write)임의 경로 쓰기SaveArtifact 도구 또는 ~/.dartlab/

차단 시 PermissionError 메시지에 원인 + 대안 포함.

우회 시도 시 에러 메시지 예

PermissionError: RunPython: 'os.system(...)' 호출 차단. 외부 클라이언트 안전을 위해
destructive / shell 호출 비허용. 분석은 dartlab API · polars · pathlib (읽기) ·
~/.dartlab/ · /tmp/ 안의 안전 쓰기로.
PermissionError: RunPython: 파일 쓰기는 안전 경로만 허용 (...). 시도된 경로:
C:Windowssystem_test.ini. 결과 저장은 SaveArtifact 도구 사용 권장.

구현 위치 — 회귀 가드

한계 (sandbox 가 막지 않는 것)

  • CPU/메모리 폭주 — 60 s timeout 만 있음. 큰 dataframe 으로 OOM 가능.
  • 네트워크 호출requests/httpx 통한 HTTP 는 허용 (정상 use case 다수).
  • dartlab 자체 함수의 부수 효과 — dartlab API 가 disk write 하면 그건 그 API 의 정책.
  • pickle.loads 등 위험 deserialize — block 안 됨. 신뢰된 데이터만 다룰 책임은 LLM/사용자.

런타임

실행 환경별 호환성

환경상태비고 / 제한
Local Python supported
Server supported
MCP supported
Web AI supported
Pyodide limited
  • Pyodide 는 별도 sandbox — os/subprocess/socket 자체가 없거나 다른 의미.

실패 회피

흔한 실패 · 절대 금지

흔한 실패
  • dartlab API)
  • SaveArtifact 또는 ~/.dartlab/)
  • import 자체가 막힌다고 오인 (실제로는 호출 시점에만 차단)
절대 금지
  • destructive shell 호출을 우회하려고 __import__ 사용 금지 — 동일 차단.
  • 안전 경로 외 파일 쓰기를 시도하지 않는다 — SaveArtifact 도구 권장.