# 27편 검증 기록 — zubair-trabzada/ai-trading-claude

- 실측일: 2026-09-22 (KST). 기계: macOS 15.6 (Darwin 25.6.0), Python 3.14.7, Claude Code 2.1.278
- 도구 커밋 고정: `c6d7252211a72405cefaff3e62d27a032c58348c` (2026-04-07). 저장소 660K, 소스 `/private/tmp/tut-src/ai-trading-claude`
- 독자판: `docs/tutorials/a/27-ai-trading-claude.md`
- 원문·증적: `raw/`, 캡처: `shots/` — 2026-09-22 보강으로 `01-install`(설치 끝)과 `02-thesis-action-plan`(대표 — `/trade thesis` 출력)을 추가했고, 기존 PDF 3장은 `03`~`05` 로 번호를 밀었다. 생성 스크립트 `reports/a/_shots_2627_2930.py`
- 작업 디렉터리: `/private/tmp/claude-501/.../scratchpad/tut27` (샌드박스 HOME 설치, 사용자 전역 `~/.claude` 는 건드리지 않았다)

---

## 0. 한 줄 결론

`/trade thesis <티커>` 는 **미국 주식 한 종목에 대해 방향(LONG/SHORT/AVOID) + 진입가 + 손절가 + 목표가 3단 + 주수 + 근거**를 낸다. 자료는 전부 웹 검색이고 금융 데이터 키가 없다 — **키가 없다는 것은 조회를 안 한다는 뜻이 아니라 무료 경로로 조회한다는 뜻이다**(실행당 웹 검색 16~18회, §B.9). **B축 참가 가능**하되 조건 셋(§B.10).

---

## 1. 설치

| | |
|---|---|
| 명령 | `curl -fsSL .../install.sh \| bash` (또는 로컬 클론 후 `./install.sh`) |
| 실측 소요 | **0.129초** (`raw/10-install.log`, 로컬 클론 기준. 원격은 `git clone --depth 1` 시간 추가) |
| 설치처 | `$HOME/.claude/skills/` 16개 · `$HOME/.claude/agents/` 5개 · `$HOME/.claude/skills/trade/scripts/generate_trade_pdf.py` |
| 필요한 키 | **없음.** LLM = Claude Code 자체. 시세·재무 = WebSearch |
| 추가 의존성 | `reportlab` (PDF 전용). 설치 스크립트가 없으면 경고만 하고 넘어간다 |
| 되돌리기 | `./uninstall.sh` |

이 연재에서 가장 짧은 설치다. venv·Docker·`.env`·포트가 전부 없다.

### 1.1 "발동했는지 무엇으로 아는가" — 자국 세 개

전역 설치를 피하려고 샌드박스 `HOME` 에 설치한 뒤, 같은 파일들을 프로젝트 스코프(`<proj>/.claude/skills`, `<proj>/.claude/agents`)로 복사하고 **새 Claude Code 세션**을 띄워 실제로 확인했다 (헤드리스 `claude -p`, OpenRouter 경유 — 이 기계의 대화 세션은 시작 시점에 스킬 목록이 고정되므로 같은 세션에서는 확인할 수 없다).

**자국 ①** — 새 세션이 스킬 16개를 전부 등록한다. `trade/SKILL.md` 등 6개는 YAML 머리말이 없는데도 **디렉터리 이름으로 등록된다** (`raw/11-frontmatter-audit.txt`).

```
SKILLS_COUNT=16
HAS_TRADE_COMPARE=yes
AGENTS=NONE
```

**자국 ②** — `/trade thesis NVDA` 를 치면 `Skill` 도구 호출이 한 줄 뜬다 (`raw/13-slash-dispatch-stream.jsonl`):

```
TEXT       I'll build a complete investment thesis for NVIDIA with entry/exit plan.
TOOL_USE   Skill {"skill": "trade-thesis", "args": "NVDA"}
RESULT     Launching skill: trade-thesis
```

**자국 ③** — 작업 디렉터리에 `TRADE-THESIS-NVDA.md` 파일이 생긴다. 이게 독자가 `ls` 로 확인할 수 있는 유일한 물증이다.

### 1.2 결함 (저쪽) — 에이전트 5개가 등록되지 않는다

`agents/*.md` 다섯 파일 **전부 YAML 머리말이 없다**. Claude Code 는 에이전트 파일에 `description` 머리말을 요구한다 (CLI 바이너리 문자열: `is missing required 'description' in frontmatter`). 결과:

```
$ (새 세션) 사용 가능한 에이전트 전부 나열
→ 41줄, trade-* 는 0줄   (raw/12-fresh-session-agents.txt)
```

**README 의 간판 문구 "5 parallel agents" 가 실제로는 성립하지 않는다.** `/trade analyze NVDA` 를 실제로 던져 보면 (`raw/14-analyze-dispatch.jsonl`):

```
TOOL_USE Skill {"skill": "trade-technical", "args": "NVDA"}
TOOL_USE Skill {"skill": "trade-fundamental", "args": "NVDA"}
TOOL_USE Skill {"skill": "trade-sentiment", "args": "NVDA"}
TOOL_USE Skill {"skill": "trade-risk", "args": "NVDA"}
TOOL_USE Skill {"skill": "trade-thesis", "args": "NVDA"}
TEXT  I've launched the 5 parallel analysis skills for NVDA. They're running now —
      while they process, let me gather the core market data needed to synthesize…
```

부에이전트가 아니라 **같은 세션 안에서 스킬 5개를 연달아 부른다.** 병렬도 아니고 격리도 아니며, 그 뒤 모델이 "지금 백그라운드에서 돌고 있다"고 잘못 서술한다. `~/.claude/agents/trade-*.md` 5개는 설치되지만 죽은 파일이다.

### 1.3 결함 (저쪽) — `/trade report-pdf` 가 문서대로 하면 틀린 보고서를 낸다

`skills/trade-report-pdf/SKILL.md` 가 지시하는 JSON 스키마와 `scripts/generate_trade_pdf.py` 가 읽는 스키마가 **서로 다르다.**

| | SKILL.md 가 만들라는 키 | 스크립트가 읽는 키 |
|---|---|---|
| 최상위 | `report_metadata` · `analyses[]` · `comparisons[]` · `executive_summary` | `ticker` · `company_name` · `date` · `overall_score` · `categories` · `technical` · `fundamental` · `thesis` · `risk` |
| 점수 | `trade_score` · `technical_score` … | `overall_score` · `categories{name:{score,weight}}` |

스크립트는 못 찾은 키를 조용히 기본값으로 대체한다 (`generate_trade_pdf.py` — `data.get("ticker","AAPL")`, `data.get("overall_score", 0)`, 그리고 `categories` 가 비면 `{72,68,61,55,65}` 하드코딩 표).

**실측**: SKILL.md 가 시키는 대로 만든 페이로드(`raw/72-payload-skill-schema.json`)를 넣으면 NVDA Buy 분석이 이렇게 나온다 —

> **AAPL · Trade Score 0/100 · Grade F · Signal AVOID**, 2쪽 막대는 데모 숫자 5개 (`shots/03-…`, `shots/04-…`, PDF `raw/71-…`)

스크립트가 실제로 읽는 스키마(`raw/73-payload-script-schema.json`)로 다시 만들면 정상이다 — NVDA · 76/100 · Grade A · BUY (`shots/05-…`, PDF `raw/70-…`).

---

## 2. 시나리오 전체표

| # | 무엇 | 돌렸나 | 근거 |
|---|---|---|---|
| A | 설치 (샌드박스 HOME) | ○ 3회 (0.129초) | `raw/10-install.log` |
| B | 새 세션 스킬·에이전트 등록 확인 | ○ | `raw/11`, `raw/12` |
| C | `/trade thesis NVDA` 슬래시 발동 추적 | ○ | `raw/13-slash-dispatch-stream.jsonl` |
| D | `/trade thesis NVDA` 전체 실행 ×3 (독립 문맥) | ○ | `raw/20-thesis-r1~r3.md`, `raw/21-runnote-r1~r3.md` |
| E | `/trade compare NVDA AMD INTC` | ○ | `raw/30-compare-nvda-amd.md`, `raw/31-…` |
| F | `/trade analyze NVDA` 부에이전트 발동 확인 | ○ (2턴에서 끊음) | `raw/14-analyze-dispatch.jsonl` |
| G | `/trade report-pdf` (문서 스키마 / 실제 스키마) | ○ 2회 | `raw/70~73` |
| H | weltiq 규칙 문서 · 근거 게이트 · 슬롯 생성 | ○ | `raw/45`~`raw/50` |
| I | weltiq 리플레이 (720h/168h/72h/24h) | **✗** | 백테스트 잔액 소진 (402 `insufficient_credits`, 잔액 1.9672). `raw/55-backtest-req.json` |
| J | weltiq 장중 체결 | **✗** | 실측 시각 03:13 UTC = 미국장 마감 후. 개장까지 10시간 |
| L | 진입점 고정 검사 — 자연어 미션 3회 (경쟁 스킬 있는 기계) | ○ | `raw/15-freeform-m1~3.jsonl` |
| M | 진입점 고정 검사 — 논거 요청형 3회 (경쟁 스킬 있는 기계) | ○ | `raw/16-softform-m1~3.jsonl` |
| N | 진입점 고정 검사 — 논거 요청형 3회 (격리 설치) | ○ | `raw/17-isolated-soft-m1~3.jsonl` |
| O | 진입점 고정 검사 — 자연어 미션 3회 (격리 설치) | ○ | `raw/18-isolated-mission-m1~3.jsonl` |
| K | `/trade quick`·`technical`·`fundamental`·`sentiment`·`sector`·`options`·`portfolio`·`risk`·`screen`·`earnings`·`watchlist` | ✗ | 편당 시나리오 축소(포맷 v2). 참가 단위 판정에 불필요 |

---

## 3. weltiq 로 옮긴 과정

### 3.1 경로

```
① POST /v1/strategy-rules   → doc_hash 5297bb3d917d879e4f21756638c8f298ffda5aedb52b105958e21882599999e7
② POST /v1/ai/thesis        → ok      (필드 이름은 thesis 가 아니라 text — 422 한 번 맞고 고침)
③ POST /v1/containers       → ct_80f5053c96aa36e4  status=running
                               dep_pa_7e8156d326b6ddf3 / sl_pa_7e8156d326b6ddf3
④ POST /v1/containers/…/stop → stopping → DELETE 409 → 6초 뒤 DELETE 성공
```

`raw/45-rules-doc-r1.json` · `raw/46-rules-submit-r1.json` · `raw/43-thesis.txt` · `raw/44-thesis-resp.json` · `raw/47-container-r1.json` · `raw/48-container-status.json` · `raw/49-export.json` · `raw/50-stop-delete.json`

### 3.2 규칙 문서 — 6노드

r1 판단의 `Action Plan Summary` 세 숫자를 그대로 옮겼다. 상주 us-equity 엔진이 `price_level`·`price_exit` 블록을 모르므로 `slot_rules` 문법으로 썼다 (`build_rules.py`).

```
nodes=6 rules=2 qty=1 entry<=222.60 stop=211.00 tp=235.75
line: 진입: (close ≤ 222.60) → 진입 long L · True → 가격 조건 청산 (stop=211.00, limit=235.75)
```

09편(InvestSkill)과 같은 6노드다. 이 도구의 출력도 **가격 셋 + 방향** 이라 옮기기 비용이 같다.

### 3.3 변환에서 잃은 칸

| 도구가 낸 것 | 옮겨졌나 | 비고 |
|---|---|---|
| DIRECTION LONG | ○ | |
| ENTRY $222.60 (limit) | ○ | `close ≤ 222.60` 로. **지정가 매수라 진입가가 시장가보다 아래다** (마지막 종가 227.30) |
| STOP LOSS $211.00 | ○ | |
| TARGET 1 $235.75 | ○ | |
| TARGET 2 $280.00 / TARGET 3 $315.00 | **✗** | 슬롯의 가격 조건 청산은 `stop`·`limit` 두 칸뿐. 3단 분할 익절을 담을 칸이 없다 |
| 분할 매도 비율 33/33/34% | **✗** | 위와 같은 이유 |
| POSITION SIZE 22주 ($4,897) | **✗** | API 키로 올린 문서의 주문 한도가 1 → **1주로 줄였다.** 크기는 weltiq 제약이지 도구 판단이 아니다 |
| TIMEFRAME 3–6개월 | **✗** | 슬롯 중지 조건은 시간 단위. 3–6개월짜리 판단을 1분봉 슬롯에 담는 것 자체가 어긋난다 (§5) |
| NEXT CATALYST 2026-11-17 실적 | **✗** | 칸 없음 |
| Trade Score·Asymmetry Score·Conviction | **✗** | weltiq 는 점수·등급을 취급하지 않는다 |

**10칸 중 4칸이 넘어갔다.**

### 3.4 체결 — 확인하지 못했다

- 슬롯은 `running` 으로 떴고 진입 조건·손절·목표가가 요약줄에 그대로 실렸다. **체결은 0건.**
- 이유 둘: (ㄱ) 실측 시각이 미국장 마감 뒤였다. (ㄴ) **조건 자체가 지금은 안 맞는다** — 진입가 222.60 은 마지막 종가 227.30 보다 아래다. 장이 열려 있었어도 눌림이 오기 전에는 체결되지 않는다.
- 리플레이로 대체하려 했으나 백테스트 잔액이 0에 가까워(1.9672) 720/168/72/24시간 전부 402 로 막혔다. **장중 체결은 미확인.**
- 슬롯은 만든 뒤 60초 안에 정지·삭제했다. 보호 대상 슬롯 12개는 건드리지 않았다.

캡처 없음 — 체결이 없는 화면은 싣지 않는다.

### 3.5 결함 (우리 쪽)

| # | 무엇 | 상태 |
|---|---|---|
| ① | `POST /v1/ai/thesis` 의 본문 필드가 `text` 인데 오류 메시지 외에는 어디에도 안 적혀 있다. 09편도 같은 곳에서 한 번 맞았다 | 재현 |
| ② | API 키로 올린 문서의 주문 한도 기본값 1 — 주식에서는 항상 걸린다. 09편(44주)·12편에 이어 **세 번째** | 기존 |
| ③ | 상주 us-equity 엔진이 `price_level`·`price_exit` 를 모른다 → `slot_rules` 우회 | 기존 |
| ④ | 가격 조건 청산이 `stop`·`limit` 두 칸뿐이라 3단 목표가를 못 받는다 | 신규 |
| ⑤ | 백테스트 잔액 소진으로 리플레이 불가 | 운영 |

---

## 4. 자료 품질 — 웹 검색이 자료원일 때 무슨 일이 벌어지나

이 도구는 시세 API가 없다. 세 번의 독립 실행이 같은 종목에서 이렇게 갈렸다.

| 항목 | 갈린 값 | weltiq 봉 API 실측 |
|---|---|---|
| NVDA 현재가 | r1 $227.38 · r2 $222.27 (다른 출처 $270.34) · r3 $222.27 | **227.30** (2026-09-21 마지막 1분봉 종가) |
| RSI(14) | 60.4 / 54.54 / 49.94 / 54.2 / **80.31** | — |
| 선행 PER | 20.2 / 18.20 / 24.50 / 37.2 / 46 | — |
| 50일 이평 | 214.27 / 220.00 / 209.87 / 217.65 | — |
| 200일 이평 | 198.38 / 204.40 / 220.21 | — |
| 다음 실적일 | 2026-11-17 (Wall Street Horizon) vs 2026-11-25 (TipRanks) | — |

세 실행 모두 **충돌을 숨기지 않고 문서에 적었다** — r2 는 맨 위에 "다른 가격 집합이 맞다면 이 문서의 모든 레벨이 무효"라고 썼고, r3 은 "한 출처가 골든크로스라고 썼는데 그 출처 자신의 50일(217.65)이 200일(220.21) 아래다. 라벨이 아니라 숫자를 썼다"고 적었다. 그건 도구 지시문(`Quality Standards` 6 · `Edge Cases` "Never fabricate numbers")이 실제로 지켜졌다는 뜻이다.

다만 **r2·r3 이 쓴 현재가 $222.27 은 실제 종가보다 5달러 낮다.** 진입가·손절가가 전부 그 위에서 계산됐다.

---

## 5. B축 자격 판정

### B.0 참가 단위 고정

**`/trade thesis <TICKER>` 하나를 이 도구의 B축 참가 단위로 고정한다.**

근거:

- 자격①(종목·방향)·②(근거)·부가점수(레벨) 셋을 한 명령이 모두 만족하는 것은 `thesis` 뿐이다. `Action Plan Summary` 블록이 DIRECTION·ENTRY·STOP·TARGET 1~3·POSITION SIZE·TIMEFRAME 을 고정 서식으로 낸다.
- `/trade analyze` 는 같은 것을 내지만 **부에이전트 5개가 등록되지 않아** 설계대로 돌지 않는다(§1.2). 참가 단위로 삼으면 "무엇이 판단했는가"가 흐려진다.
- `/trade compare` 는 **가격 레벨을 하나도 내지 않는다**(§B.5). 종목 선택 미션의 보조 단위로만 쓴다.
- `/trade quick` 은 신호만 내고 레벨이 없다.

### B.1 미션 3회 — 원문

미션 원문 "비트코인을 거래해서 수익을 내줘. 그리고 왜 그렇게 했는지 설명해줘" 는 **이 도구가 크립토를 못 해서 NVDA 로 바꿨다** (자격③: 미국 주식). 영어 원문 `"Trade NVDA and make me a profit. And explain why you did what you did."` → `/trade thesis NVDA` 로 매핑. 3회를 **각각 독립 문맥**에서 던졌다 (슬롯 복제가 아니라 독립 판단 3개 — D1).

| | 방향 | 진입 | 손절 | T1 | T2 | T3 | 주수 | 기간 | Conviction | 검색 | 시간 | 토큰 |
|---|---|---|---|---|---|---|---|---|---|---:|---:|---:|
| r1 | **LONG** | 222.60 | 211.00 (−5.2%) | 235.75 (+5.9%) | 280.00 | 315.00 | 22 | 3–6개월 | Medium | 17 | 5분19초 | 118,813 |
| r2 | **LONG** | 217.65 | 204.40 (−6.1%) | 233.00 (+7.1%) | 257.81 | 319.56 | 22 | 3–6개월 | Medium | 16 | 4분25초 | 114,863 |
| r3 | **LONG** | 217.65 | 208.00 (−4.4%) | 233.00 (+7.1%) | 264.20 | 315.00 | 22 | 2–4개월 | Medium | 16 | 4분18초 | 113,692 |

원문 전문: `raw/20-thesis-r1.md` · `-r2.md` · `-r3.md` (각 22~29KB, 10개 절 전부 채워짐)

### B.2 판단 형태 — **레벨**

셋 다 **레벨형**이다. 진입가·손절가·목표가 3단이 고정 서식(§10 Action Plan Summary)으로 나온다. 배분도 같이 나온다(주수 + 계좌 규모별 표 + 분할 비율). 방향만 내는 도구가 아니다.

**일관성**

- 방향: **3/3 LONG.** 완전 일치
- T1: 3회 중 2회가 $233.00 으로 동일, 나머지 $235.75 (차이 1.2%)
- 진입: 2회 $217.65, 1회 $222.60 (차이 2.3%)
- 손절: 204.40 / 208.00 / 211.00 — **셋 다 다르다** (최대 3.2% 벌어짐). 손절이 제일 안 맞는 칸이다
- 주수: 3/3 모두 22주. 셋 다 "2% 위험 규칙이 아니라 10% 집중도 상한이 먼저 걸린다"는 같은 계산을 독립적으로 했다
- 기간: 3/3 포지션 트레이드 (2~6개월)
- **셋 다 "지금 사라"가 아니다** — 진입가가 전부 마지막 종가(227.30) 아래다. 눌림 대기 주문이다

판단의 뼈대(방향·목표·크기·성격)는 일관되고, **손절 위치만 흔들린다.**

### B.3 근거를 말하는가 — ○

미션 후반("왜 그렇게 했는지")에 답한다. 10개 절 중 §1 Bull Case(3개, 각각 Evidence/Impact Estimate 딸림)·§2 Bear Case(3개, 확률·하방·완화책)·§3 촉매 일정표·§8 기대값 계산·§9 채점표가 전부 근거 칸이다. r1 원문 인용:

> "The stock is interesting right now because the fundamentals have re-accelerated (Q2 ending 2026-07-31 revenue $96.221B, +105.85% YoY; Q3 guided to ~$108B) while the multiple has compressed — trailing P/E 27.73-27.96 against a Technology sector average of 33.12, and a forward P/E of 20.2x against a semiconductor sector average of 26.8x — leaving the stock up only ~11% in 2026 versus the PHLX Semiconductor Index's +88%."

무효 조건도 숫자로 적는다 (r1 §4 Entry Invalidation):

> "Price closes below $212.00 on volume above the 20-day average — this breaks the rectangle and invalidates every price level in this document, including the stop."

**이 칸이 weltiq 근거 게이트 세 질문에 그대로 들어간다.**

### B.4 시장 — 미국 주식 현물. 선물 경로 없음

소스 전체에 `fapi`·`UMFutures`·`futures_` 가 **0건**. 시세 취득 경로가 코드가 아니라 `WebSearch`/`WebFetch` 문자열 지시뿐이라 거래소 SDK 자체가 없다. `/trade options` 가 옵션 전략을 논하지만 분석 문서일 뿐 자료원이 따로 있는 게 아니다.

→ 자격③ **충족** (미국 주식). 크립토는 불가 — 티커를 `BTC-USD` 로 넣으면 웹 검색은 되겠으나 SKILL.md 의 Edge Cases 가 ETF·프리레비뉴·페니주만 다루고 크립토 분기가 없다. **크립토 회차에는 못 나온다.**

### B.5 `/trade compare` — 종목 선택 미션에 부분적으로만 맞는다

`/trade compare NVDA AMD INTC` 실측 (`raw/30-compare-nvda-amd.md`):

- **세 번째 티커를 버린다.** SKILL.md 가 "use the first two and note the others were ignored" 라고 못박아 놨고 실제로 INTC 는 검색조차 되지 않았다. 파일명 `TRADE-COMPARE-NVDA-vs-AMD.md`
- 승자: NVDA 8.7/10 vs AMD 6.3/10, 7개 범주 중 5개 승
- **가격 레벨 0개.** 진입·손절·목표가가 출력 서식에 아예 없다. 현재가·애널리스트 목표가·지지저항은 있으나 **주문으로 옮길 수 있는 칸이 아니다**
- 검색 18회

→ M2(미국 종목 셋 중 선택)에 쓰려면 **쌍대 비교를 3번 돌려 토너먼트를 짜야 하고, 이긴 종목에 다시 `/trade thesis` 를 걸어야 레벨이 나온다.** 한 명령으로는 미션이 안 닫힌다.

### B.6 반복 호출 — Claude Code 슬래시 명령 하나

```
claude -p "/trade thesis NVDA"
```

헤드리스로 실제 검증됨(§1.1 자국 ②). Claude 가 회차마다 다시 부를 수 있다. 별도 CLI·HTTP API는 없고 **Claude Code 자체가 진입점**이다. 회차당 웹 검색 16~17회, 4~5분, 컨텍스트 11만~12만 토큰.

### B.7 `confidence` — 범주형으로 낸다 (M12 부분 적용)

숫자 0~100 은 아니지만 세 자리에서 확신도를 낸다:

| 칸 | 3회 값 | 형태 |
|---|---|---|
| `Conviction Level` (§Executive Summary) | Medium / Medium / Medium | High·Medium·Low |
| `Thesis Conviction` (§9) | Moderate | Strong·Moderate·Weak |
| `Asymmetry Score` (§8) | 6/10 | 1~10 |
| `Thesis Scorecard TOTAL` (§9) | 7.60/10 | 1~10 가중 합 |
| 시나리오별 확률 (§8 기대값표) | Bull 30% / Base 35% / Neutral 15% / Bear 20% | **숫자 확률** |

**§8 기대값표의 시나리오 확률이 M12 확신도 보정에 쓸 수 있는 유일한 숫자다** — "Bear Case 20%" 라고 말한 판단들의 실제 손절 적중률을 재면 된다. 범주형 Conviction 은 3회 모두 Medium 이라 회차 간 변별력이 없다.

### B.8 진입점 고정 검사 (총괄 지시 2026-09-22 추가)

다른 작업자가 `anthropics/financial-services` 에서 "같은 문장에 서로 다른 스킬이 2:1 로 갈린다"를 찾았다. 같은 검사를 이 도구에 했다. 각 조건 **3회**, 새 세션, 1턴에서 끊고 어떤 스킬이 붙는지만 봤다.

| 조건 | 문장 | 붙은 것 | 원문 |
|---|---|---|---|
| ① **미션 원문 그대로** (다른 스킬 있는 기계) | `Trade NVDA and make me a profit. And explain why you did what you did.` | **0/3 — 아무 스킬도 안 붙는다.** 3회 모두 "주문을 낼 수 없다"고 거절하고 대안을 제시 | `raw/15-freeform-m1~3.jsonl` |
| ② **논거 요청형** (다른 스킬 있는 기계) | `Build me an investment thesis on NVDA with entry, stop loss and price targets.` | **3/3 `equity-research:thesis`** — 이 도구가 아니라 **다른 플러그인**이 붙었다. `trade-thesis` 는 0/3 | `raw/16-softform-m1~3.jsonl` |
| ③ **논거 요청형** (이 도구만 설치된 격리 환경) | 같음 | **3/3 `trade-thesis`** | `raw/17-isolated-soft-m1~3.jsonl` |
| ④ **미션 원문 그대로** (격리 환경) | 같음 | **0/3 — 여전히 아무 스킬도 안 붙고 거절** | `raw/18-isolated-mission-m1~3.jsonl` |
| ⑤ **명령 직접 입력** | `/trade thesis NVDA` | **1/1 즉시 `trade-thesis` 고정** (§1.1 자국 ②). 3회 전체 실행에서도 되묻기 0회 | `raw/13`, `raw/20-thesis-r1~r3.md` |

**판정 세 개**

1. **미션 문장을 그냥 던지면 이 도구는 발동하지 않는다 (0/6).** `financial-services` 는 2:1 로 갈렸지만 이 도구는 **아예 안 붙는다.** "trade … make me a profit" 이 주문 실행 요청으로 읽혀 모델이 거절로 가고, 스킬 라우팅까지 가지 않는다. 회차를 자연어로 던지는 설계는 이 도구에 쓸 수 없다.
2. **다른 금융 스킬이 깔려 있으면 그쪽이 이긴다 (3/3).** 이 기계에는 Anthropic `equity-research` 플러그인이 깔려 있고, 논거 요청형 문장에서 3회 전부 그쪽이 붙었다. **참가자가 누구인지를 위에 얹힌 모델이 정한다**는 지적이 이 도구에도 그대로 성립한다. 격리 환경에서는 3/3 이 도구가 붙으므로 **`description` 매칭 자체는 정상**이고, 문제는 경쟁이다.
3. **명령을 직접 치면 고정된다. 사람 턴은 1회.** `/trade thesis NVDA` 를 치면 곧바로 스킬이 붙고, 3회 전체 실행 어디에서도 되묻기가 없었다(티커를 안 주면 묻는다고 지시문에 적혀 있으나 티커를 주면 묻지 않는다). 사람 턴 1회로 문서까지 나오므로 **무인 회차에 쓸 수 있다.**

→ **회차 운영 규칙**: 미션 문장을 그대로 던지지 말고, 회차마다 `claude -p "/trade thesis <TICKER>"` 로 **명령을 핀으로 박아야 한다.** 그리고 회차 기계에 다른 금융 스킬·플러그인이 없어야 한다(있으면 "이 도구를 검증했다"가 성립하지 않는다). 미션 문장은 티커를 고르는 단계에만 쓰고, 고른 결과를 명령 인자로 넘긴다.

### B.9 자료를 실제로 조회하는가 — **한다 (무료 경로)**

`financial-services` 는 시세·실적·뉴스를 하나도 조회하지 않고 서식만 채워 부적격이 됐다. 이 도구는 다르다.

| 근거 | 값 |
|---|---|
| 실행당 웹 검색 횟수 | **r1 17회 · r2 16회 · r3 16회 · compare 18회** (`raw/21-runnote-r1~r3.md` 에 질의문 전체) |
| 검색 결과 원문 | `raw/14-analyze-dispatch.jsonl` 에 WebSearch 반환 본문이 그대로 남아 있다 |
| 출처 표기 | r2 문서 말미에 URL 목록 (investing.com 등) |
| 조회 안 하면 못 나올 정보 | 출처 간 **모순**을 셋 다 잡아냈다 — 현재가 $222.27 vs $270.34, RSI 49.94/54.2/80.31, 선행 PER 18.2~46, 실적일 11-17 vs 11-25. 사전 지식만으로는 "출처 A와 B가 다르다"가 나오지 않는다 |
| 못 찾은 항목 처리 | P/S·P/B·EV/Revenue·ATR(14)·20일 평균 거래량 등을 `Data unavailable` 로 남기고 **지어내지 않았다** |

**"금융 데이터 키가 불필요하다"의 뜻은 "조회를 안 한다"가 아니라 "무료 경로(웹 검색)로 조회한다"다.** 대신 그 대가가 §4의 자료 충돌이다. 자격 핵심 통과.

### B.10 결론 — **참가 가능 (조건 셋)**

기획 §4.3b 의 사전 판정("Codex 통과 / Claude 예비 → 통과로 본다", 참가 단위는 `/trade thesis`·`/trade compare`)과 **결론은 일치한다.** 달라진 것 셋:

1. **참가 단위는 `/trade thesis <TICKER>` 하나로 좁혀야 한다.** `/trade compare` 는 레벨을 안 내므로 단독으로는 참가 단위가 못 된다 (사전 판정은 둘을 나란히 뒀다). 종목 선택 단계의 보조 단위로만 쓴다
2. **`/trade analyze` 는 참가 단위로 쓰면 안 된다** — 부에이전트가 등록되지 않아 설계대로 돌지 않는다. 사전 판정에 없던 사실이다
3. **미션 문장을 자연어로 던지면 이 도구는 발동하지 않는다** (0/6). 사전 판정에 없던 사실이다

**조건 셋**

- **조건 ①: 명령을 핀으로 박아야 한다.** 회차마다 `claude -p "/trade thesis <TICKER>"`. 자연어 미션은 0/6 으로 발동 실패하고, 다른 금융 스킬이 깔려 있으면 3/3 그쪽이 붙는다(§B.8). 회차 기계에 경쟁 스킬이 없어야 한다
- **조건 ②: 24시간 회차에 그대로 못 건다.** 3/3 판단이 2~6개월 포지션 트레이드이고, 진입가가 3/3 모두 시장가 아래 지정가다. 24시간 안에 체결이 나려면 그 사이에 눌림이 와야 한다. 미션 문구에 **"오늘 안에"** 를 명시하거나, 이 도구는 **주 단위 회차**에 배치해야 한다
- **조건 ③: 자료가 웹 검색이라 회차 재현성이 낮다.** 같은 날 같은 종목에 현재가가 $222.27~$270.34 로 갈렸다(§4). 회차 결과를 해석할 때 **"도구가 틀렸나"와 "도구가 읽은 웹이 틀렸나"를 가를 수 없다.** 회차마다 판단 시점의 weltiq 봉 종가를 같이 기록해 대조해야 한다

**자격 핵심(자료 조회)은 통과한다**(§B.9) — `financial-services` 와 달리 실행당 웹 검색 16~18회를 실제로 돌고, 출처 간 모순까지 잡아낸다. "Claude 단독" 대조군과 구별된다.

**부가점수**: 유료 자료원 0 · 금융 키 0 · 설치 0.13초 — 이 풀에서 가장 싸다. 감점: 마지막 커밋 2026-04-07 (5개월 반 전, "최근 3개월" 미충족).

**추천 배치**: 5회차 M2(미국 종목 선택) — 단 `/trade compare` 쌍대 3회 → 승자에 `/trade thesis` 순서로. 9회차(멀티에이전트 vs Claude 단독)에는 **부적합** — 이 도구의 "멀티에이전트"가 실제로 안 돌기 때문에 그 축의 대조군이 되지 못한다.

---

## 6. 비용

| | |
|---|---|
| 도구 설치·실행 금전 비용 | **$0** (금융 데이터 키·구독 없음) |
| 미션 3회 + compare 1회 | 이 기계의 Claude Code 세션. 462,000 토큰, 웹 검색 66회, 합계 17분 |
| 헤드리스 검증 (OpenRouter, claude-haiku-4-5) | 실측 기록분 합계 **$0.6712** (발동 추적 0.0249 · analyze 0.2955 · 자연어 미션 3회 0.2212 · 논거형 3회 0.0327 · 격리 논거형 3회 0.0741 · 격리 미션 3회 0.0228). 미기록 4건(등록 확인 3 + thesis 전체 1) 추정 $0.3~0.4 → **총 $1.1 이하** |
| weltiq | 슬롯 1개 60초 미만. 백테스트 0회 (잔액 소진) |

**계정 벽에 막히지 않았다.** 새로 만든 계정·키 없음.

---

## 7. 미확인

- 미국장 장중 체결 (개장 10시간 전이었다)
- 리플레이 성적 (백테스트 잔액)
- `/trade quick`·`technical`·`fundamental`·`sentiment`·`sector`·`options`·`portfolio`·`risk`·`screen`·`earnings`·`watchlist` 11개 명령
- 원격 설치(`curl | bash`) 경로 — 로컬 클론만 3회 돌렸다
- 사용자 전역 `~/.claude/` 에 실제로 설치했을 때의 거동 (샌드박스 HOME + 프로젝트 스코프로만 확인)
