CAPSTONE 2 / MARKET DESK ON TUI / 135 MIN

터미널 주식 시황 데스크

Textual + yfinance + pykrx + Bedrock, 풀스펙 시황 모니터를 처음부터 내 손으로

브라우저 없이, 터미널 하나가 통째로 시황 데스크가 됩니다. 경제지표 11종, US/KR 시장지수와 시장 요약, 섹터 등락, 종목 테이블, 뉴스 피드가 한 화면에, 종목 상세에는 MA5/MA20 골든크로스 차트와 호가창, 투자자 동향, 그리고 A 키 한 번의 Bedrock 분석까지. superpowers 워크플로로 빈 폴더에서 끝까지 빌드합니다. TUI라서 code-server 터미널에 그대로 뜨고, 프록시도 배포도 필요 없으며, 다른 참가자와의 의존성도 없습니다.

소요 시간 135분 미션 5개 + DoD 산출물 터미널에서 뛰는 풀스펙 데스크 Update 2026.07
MISSION BRIEFING

목표물과 기조

숙지

다른 캡스톤과 같은 기조입니다: 빈 폴더에서 superpowers 워크플로로 설계하고 Phase 단위로 빌드합니다. 목표물은 풀스펙 터미널 시황 데스크, 완성형 레퍼런스로 원작 stock-on-tui가 있습니다. 클론하지 않습니다, 막혔을 때 훔쳐보는 지도일 뿐입니다.

완성 예시, 원작 Dashboard 실행 화면
완성 예시 - 원작 Dashboard 실행 화면. 경제지표 바(11종), 지수 카드 5장(등락색 보더), 시장 요약(Top 상승/하락과 거래량 리더), US/KR 섹터 바, US/KR 50종목 테이블, 뉴스 피드, footer의 "Next refresh in 45s"까지. 바이브 코딩 라운드의 장면 A가 바로 이 화면의 텍스트 묘사입니다.
화면구성핵심 원칙
Dashboard경제지표 11종 바, US/KR 지수 카드, 시장 요약(Top 상승/하락/거래량), 섹터 등락 바, 종목 테이블(US/KR 탭), 뉴스 피드4-Wave 로딩, 빠른 것부터 즉시 표시, 45초/120초 자동 갱신
Detail가격 헤더(거래량 배율 색), 핵심 지표(PER/EPS/Beta), MA5/MA20 + 골든/데드크로스 차트(1W~1Y), 호가 10단계, 투자자 동향, 기간 수익률, 관련 지표 매핑호가와 투자자 동향은 시뮬레이션, 공개 실데이터가 없는 것은 그럴듯하게
Article + AIA 키 종목 분석 3줄, 뉴스 Enter로 기사 요약/시장 영향/인사이트/관련 종목, 영어 기사는 한국어 번역 후 분석AWS_BEARER_TOKEN_BEDROCK 인증, 키 없으면 AI만 꺼지고 앱은 산다
S목표 기능 명세, 원작 기준

M1 브레인스토밍 요구 9조항이 아래 명세를 전부 담고 있습니다. 빌드 중 길을 잃으면 이 표로 돌아오세요.

1. Dashboard (메인 화면)

기능설명
경제지표 바WTI, Gold, Silver, Copper, EUR/USD, USD/KRW, USD/JPY, USD/CNY, US 10Y, Bitcoin, Ethereum - 11개 글로벌 지표 실시간 표시
시장 지수S&P 500, NASDAQ, DOW (미국) / KOSPI, KOSDAQ (한국) - 카드형 위젯으로 현재값/등락률 표시
시장 요약US/KR 상승/하락 종목수 집계, Top 3 상승/하락 종목 (종목명 + 심볼 + 등락률 + 거래량), 거래량 Top 3
섹터 등락US/KR 시장별 섹터 평균 등락률을 막대 그래프로 시각화 (Technology, Financial, Energy 등)
주식 테이블US 50종목 / KR 50종목 탭 전환, Symbol/Name/Price/Change/%/Mkt Cap/Volume 컬럼
뉴스 피드Yahoo Finance + 한국경제 + 매일경제 RSS 뉴스 실시간 수집
자동 갱신주가 45초, 뉴스 120초 주기 자동 갱신

2. Detail (종목 상세 화면)

기능설명
가격 헤더현재가, 등락률, 거래량 + 평균 대비 배율 (1.5x 이상 빨강, 1.0x 이상 노랑)
핵심 지표Market Cap(시가총액), PER(주가수익비율), EPS(주당순이익), Beta/PBR(변동성/주가순자산), Vol(당일거래량), Avg Vol(평균거래량)
차트1W/1M/3M/1Y 기간별 Sparkline 차트 + MA5/MA20 이동평균선 + 골든크로스/데드크로스 신호
호가매도 10단계 (파란색) + 매수 10단계 (빨간색) 호가창
투자자 동향개인/외국인/기관 최근 10일간 순매수/순매도 추이
기간별 수익률1W, 1M, 3M, 1Y 기간별 수익률 계산 표시
관련 지표종목 섹터 기반 관련 경제지표 자동 매핑 (예: Energy → WTI Oil, Copper)
AI 종목 분석A 키로 AWS Bedrock Claude 기반 기술적 분석/투자 포인트/리스크 요인 3줄 요약

3. Article (뉴스 AI 분석 화면)

기능설명
기사 전문뉴스 URL에서 기사 본문 자동 추출
AI 분석Claude Sonnet 4.6을 통한 요약, 분석, 투자 인사이트, 관련 종목 도출
영한 번역영어 기사는 자동으로 한국어 번역 + 분석 제공
규칙, 캡스톤 공통 ① 파일을 손으로 짜지 말고 Claude에게 시켜서 만든다 ② 각 Phase의 DoD를 통과해야 다음으로 ③ 막히면 "막힐 때 열어보기"의 힌트 또는 원작 저장소를 참고한다.
BLUEPRINT

구현 청사진, 원작 상세 분석

참고

원작 저장소를 분석해 뽑은 구현 지도입니다. M1 설계와 각 Phase에서 Claude가 이 구조로 수렴하도록 방향을 잡아 주고, 계획이 이상하게 흐르면 여기로 돌아와 대조하세요.

1화면과 위젯 지도
화면구성 위젯전환
DashboardScreenIndicatorBar(경제지표), MarketCards(지수), MarketSummary(시장 요약), SectorBar(섹터 등락), StockTable(US/KR 탭), NewsFeed(뉴스)종목 행 Enter/클릭 → Detail
DetailScreenRichChart(MA5/MA20 + 크로스 신호), OrderBook(호가), InvestorTrends(투자자 동향), PeriodReturns(기간 수익률), RelatedIndicators(관련 지표), AI Analysis 패널뉴스 Enter → Article, B/Escape → 복귀
ArticleScreen기사 본문 + AI 분석(Markdown 뷰, 번역/요약/분석/인사이트)B/Escape → 복귀
2모듈 지도
모듈파일책임
진입/설정app.py, config.py앱 부트스트랩 / 종목, 섹터, 지표, RSS 목록 상수(전부 여기서 조절)
모델models/stock.py데이터 모델 4종: StockQuote, StockDetail, MarketIndex, EconomicIndicator
화면screens/ dashboard.py, detail.py, article.py화면 3종의 조립과 키 바인딩
위젯components/ market_summary, sector_bar, rich_chart, stock_table, market_card, indicators, news_feed재사용 위젯 7종, 화면은 이들을 배치만
데이터services/ us_stocks(yfinance), kr_stocks(pykrx), indicators(yfinance), news(RSS + 번역), stock_detail_data(호가/투자자 시뮬레이션), bedrock(AI)서비스 6종, 화면과 위젯은 데이터 출처를 모른다
스타일styles/app.tcss다크 테마 단일 스타일시트, 색과 폭은 전부 여기서
3데이터 계약과 운영 규칙
계약내용
4-Wave 로딩Wave 1 지수(빠름, 즉시) → Wave 2 경제지표(즉시) → Wave 3 US/KR 시세(병렬, 시장 요약과 섹터 바 갱신) → Wave 4 시가총액(백그라운드 테이블 갱신). 뉴스는 별도 그룹 120초
갱신 주기주가 45초, 뉴스 120초. footer에 다음 갱신까지 카운트 표시
rate limit 대응yfinance 지연 시 자동 재시도, 백오프 5초 → 10초 → 15초 (PER/EPS 지연은 이 때문, 버그 아님)
KR 장 마감KRX 마감 후 pykrx는 이전 종가를 반환, 0원 표시는 정상. 다음 거래일 장중에 갱신
벌크 수집US 시세는 yf.download 청크로 50종목 일괄, 시가총액은 스레드 백그라운드(_get_cap)
시뮬레이션 경계호가와 투자자 동향은 공개 실데이터가 없어 stock_detail_data가 생성, 호가 수량은 random.seed(가격 x 100)로 일관 유지
AI 우아한 저하AWS_BEARER_TOKEN_BEDROCK 없으면 AI 기능만 비활성, 시세/차트/뉴스는 전부 정상
C실코드 확정 상수 (config.py 분석)
상수
갱신 주기REFRESH_INTERVAL 45초, NEWS_REFRESH_INTERVAL 120초
지수 5종US: ^GSPC, ^IXIC, ^DJI / KR: ^KS11, ^KQ11 (지수는 KR도 yfinance)
지표 11종 심볼CL=F, GC=F, SI=F, HG=F, EURUSD=X, KRW=X, JPY=X, CNY=X, ^TNX, BTC-USD, ETH-USD (이름/단위 튜플)
종목US_STOCKS 50 심볼 + 이름/섹터 매핑, KR_STOCKS 50 종목코드 + 이름/섹터 매핑 (M1의 2/2 블록으로 제공)
섹터-지표 매핑SECTOR_INDICATOR_MAP, 예: Energy → CL=F, HG=F / Battery → HG=F, SI=F / Financial → ^TNX, EURUSD=X
RSS 4피드yahoo(rssindex), yahoo_markets(^GSPC headline), hankyung(/feed/economy), mk(rss/30100041)
4의존성 5종
패키지버전용도
textual>= 0.40.0TUI 프레임워크 (위젯, 레이아웃, 이벤트)
yfinance>= 0.2.31미국 주식, 지수, 경제지표
pykrx>= 1.0.45한국 주식, 지수 (KRX)
httpx>= 0.25.0RSS 수집과 기사 본문 추출
boto3>= 1.28.0Bedrock AI (선택, 없어도 앱은 동작)
5AI 계약, 원작 함수와 프롬프트 형식
항목원작 구현
함수 2종analyze_stock(symbol, name, market, sector, price, change_pct, PER, 52주 저/고, 최근 뉴스 5건) / analyze_article(title, content, is_korean)
종목 분석 입력현재가와 등락률, PER(없으면 N/A), 52주 범위 내 현재 위치 %, 최근 뉴스 제목 5개를 프롬프트에 주입
종목 분석 출력"## 기술적 분석 / ## 투자 포인트 / ## 리스크 요인" 각 2~3문장
기사 분석 출력한국어 기사: "## 요약 / ## 분석 / ## 투자 인사이트 / ## 관련 종목". 영문 기사: 맨 앞에 "## 한국어 번역" 추가, 본문은 6,000자로 자름
우아한 저하키가 없으면 안내 메시지("AI 기능을 사용할 수 없습니다 + 설정 방법")만 표시, 앱은 정상
원작보다 좋아지는 지점, 인증 원작은 BEDROCK_API_KEY를 access key와 secret 자리에 겸용 주입하고 기본 리전이 us-east-1, 기본 모델이 us. 프로파일입니다. 이 캡스톤에서는 표준 방식으로 갑니다: 환경변수 AWS_BEARER_TOKEN_BEDROCK을 boto3가 자동 인식하게 하고(자격 인자 없이), 리전 ap-northeast-2, 모델 global.anthropic.claude-sonnet-4-6, 호출은 Converse API. 원작과 비교하며 "왜 이쪽이 표준인가"를 이야기해 보는 것도 좋은 학습입니다.
원작 다이어그램 원문, Screen Flow와 4-Wave
Screen Flow
DashboardScreen --(Row Click/Enter)--> DetailScreen --(Enter on News)--> ArticleScreen
      ^                                   |   ^                              |
      +----------- B / Escape -----------+   +--------- B / Escape ---------+
Dashboard 4-Wave Loading
on_mount()
  - load_all_data()
      Wave 1: US/KR Indices        (빠름, 즉시 표시)
      Wave 2: Economic Indicators  (즉시 표시)
      Wave 3: US/KR Stock Quotes   (병렬 로딩 -> 시장 요약 + 섹터 바 갱신)
      Wave 4: Market Caps          (백그라운드, 테이블 업데이트)
  - load_news()                    (별도 그룹, 120초 주기)
MISSION 00

사전 준비

10분

Python 확인, 프로젝트 폴더, 그리고 Bearer 키(.env)까지. AI 기능(Phase 4)에 필요합니다.

Terminal, 전체 복사
python3 --version && pip3 --version
mkdir -p ~/capstone/market-tui && cd ~/capstone/market-tui
git init -q 2>/dev/null; git config user.name "capstone"; git config user.email "capstone@lab.local"

다른 캡스톤에서 이미 만들었다면 ~/capstone/.env가 있으니 1/2는 건너뛰세요.

Terminal 1/2, .env에 Bearer 토큰 저장
mkdir -p ~/capstone
cat > ~/capstone/.env << 'ENVEOF'
AWS_BEARER_TOKEN_BEDROCK=<발급받은 Bedrock API 키>
ENVEOF
Terminal 2/2, 로드 + Converse 스모크
set -a; source ~/capstone/.env; set +a
aws bedrock-runtime converse \
  --region ap-northeast-2 \
  --model-id global.anthropic.claude-sonnet-4-6 \
  --messages '[{"role":"user","content":[{"text":"ping"}]}]' \
  --inference-config '{"maxTokens":30}' \
  --query 'output.message.content[0].text' --output text
CHECKPOINT
MISSION 01

설계, 브레인스토밍

15분

화면 3개, 데이터 소스 3종, Insight와 Detail 풀스펙, 키 바인딩까지 요구 9조항으로 넘깁니다.

Terminal (~/capstone/market-tui)
cd ~/capstone/market-tui && claude
Claude 세션 입력 1/2, 설계
/superpowers:brainstorming 다음 요구사항으로 "Market Desk on TUI", 터미널 주식 시황 데스크를 설계하자.
1) Python 3.11 + Textual 기반 TUI 앱. 모듈 구조를 다음과 같이 갖춘다: app.py(진입), config.py(종목/섹터/
   지표/RSS 목록 상수), models/stock.py(데이터 모델 4종: StockQuote, StockDetail, MarketIndex,
   EconomicIndicator), screens/(dashboard.py, detail.py, article.py), components/(market_summary,
   sector_bar, rich_chart, stock_table, market_card, indicators, news_feed 위젯 7종),
   services/(us_stocks, kr_stocks, indicators, news, stock_detail_data, bedrock 6종, 화면은 데이터 출처를
   모르게), styles/app.tcss(다크 테마 단일 스타일시트). venv + requirements.txt(textual, yfinance, pykrx,
   httpx, boto3)
2) 데이터 소스: yfinance(미국 주식 50종목 + 지수 ^GSPC/^IXIC/^DJI + 경제지표 11종 심볼
   CL=F, GC=F, SI=F, HG=F, EURUSD=X, KRW=X, JPY=X, CNY=X, ^TNX, BTC-USD, ETH-USD),
   pykrx(한국 주식 50종목 + 지수는 yfinance ^KS11/^KQ11), RSS 뉴스 4피드(Yahoo 2종 + 한국경제 + 매일경제).
   종목/지표/RSS 목록은 전부 config.py 상수로 두고, 실데이터 목록은 설계 직후 이어서 제공한다.
   US 시세는 yf.download 벌크(청크)로 한 번에 받고, 개별 심볼 실패는 건너뛰고 나머지는 살린다.
   yfinance rate limit에는 5초 → 10초 → 15초 백오프로 자동 재시도한다
3) Dashboard 화면, 한 화면에 6요소: 경제지표 바(11종), 시장지수 카드(US 3 + KR 2), 시장 요약,
   섹터 등락 바, 종목 테이블(US/KR 탭 전환, Symbol/Name/Price/Change/%/Volume, 상승 초록/하락 빨강),
   뉴스 피드. 자동 갱신은 주가 45초, 뉴스 120초. 로딩은 4-Wave(지수 → 지표 → 시세 병렬 → 시가총액 백그라운드)로
   빠른 것부터 즉시 표시
4) 시장 요약과 섹터 등락(Insight): US/KR 시장별 상승/하락 종목수, Top 3 상승/하락 종목(종목명 + 등락률 + 거래량),
   거래량 리더 Top 3, 섹터별 평균 등락률 바 차트(Technology, Financial, Energy 등)
5) Detail 화면(테이블에서 Enter로 진입): 가격 헤더(현재가, 등락률, 거래량 + 평균 대비 배율, 1.5x 이상 빨강,
   1.0x 이상 노랑), 핵심 지표(Market Cap, PER, EPS, Beta/PBR, Vol, Avg Vol), 차트(1W/1M/3M/1Y 기간별
   스파크라인 + MA5/MA20 이동평균선 + 골든크로스/데드크로스 신호, 숫자키 1~4와 좌우 화살표로 기간 전환),
   호가창(매도 10단계 파란색 + 매수 10단계 빨간색), 투자자 동향(개인/외국인/기관 최근 10일 순매수/순매도),
   기간별 수익률(1W/1M/3M/1Y), 관련 경제지표(config의 SECTOR_INDICATOR_MAP 기반 자동 매핑, 예: Energy → CL=F, HG=F / Battery → HG=F, SI=F),
   B 또는 Escape로 복귀. 호가와 투자자 동향은 공개 실데이터가 없으므로 그럴듯한 시뮬레이션으로 구현한다
6) AI 기능(Bedrock Converse, global.anthropic.claude-sonnet-4-6, 리전 ap-northeast-2):
   services/bedrock.py에 함수 2종. analyze_stock은 현재가/등락률/PER/52주 범위 내 위치%/최근 뉴스 5건을 넣어
   "## 기술적 분석 / ## 투자 포인트 / ## 리스크 요인" 각 2~3문장으로 받는다(Detail의 A 키).
   analyze_article은 기사 본문(6,000자 제한)을 넣어 "## 요약 / ## 분석 / ## 투자 인사이트 / ## 관련 종목"으로
   받고, 영문 기사는 맨 앞에 "## 한국어 번역"을 추가한다(뉴스 Enter → Article 화면).
   인증은 환경변수 AWS_BEARER_TOKEN_BEDROCK(발급 API 키)을 boto3가 자동 인식, 클라이언트에 자격 인자를
   넣지 않는다. Bedrock IAM 정책은 만들지 않고, 키가 없으면 안내 메시지와 함께 AI만 비활성, 앱은 정상 동작한다
7) 키 바인딩: Dashboard는 R(새로고침), Tab/Shift+Tab(섹션 이동), Enter(종목 선택), Q(종료).
   Detail은 1/2/3/4와 Left/Right(차트 기간), P(다음 기간), A(AI 분석), Enter(뉴스 AI), R, B/Escape.
   footer에 키 도움말 노출
8) UI 무드(텍스트 스펙): 다크 배경, 섹션 라벨은 잔잔한 대문자, 숫자는 우측 정렬 모노 감각,
   상승 초록 ▲ / 하락 빨강 ▼, 배율과 신호는 색으로 말한다
9) 구현 순서는 Phase 1(스캐폴드 + US/KR 시세 서비스 + 종목 테이블) → Phase 2(대시보드 6요소 완성 + 4-Wave +
   자동 갱신) → Phase 3(Detail 풀스펙: 차트/호가/투자자/수익률/관련지표) → Phase 4(AI: A 키 분석 + Article 화면).
   시간 제약 2시간: 테스트 생략, 각 Phase는 터미널 실행으로 검증을 갈음한다.
   시간이 부족하면 Phase 3의 호가/투자자 동향, Phase 4의 Article을 후순위로 미룬다
결정이 필요하면 이 범위 안에서 최소한으로만 물어봐.
Claude 세션 입력 2/2, config 실데이터 (설계 대화에 이어서)
이어서, 방금 설계에 쓸 config.py 실데이터야. 이 상수들을 config.py에 그대로 반영해줘.
이름 매핑(US_STOCK_NAMES)과 섹터 매핑(US_STOCK_SECTORS)은 네가 아는 대로 채워.

REFRESH_INTERVAL = 45
NEWS_REFRESH_INTERVAL = 120

US_INDICES = {"^GSPC": "S&P 500", "^IXIC": "NASDAQ", "^DJI": "DOW"}
KR_INDICES = {"^KS11": "KOSPI", "^KQ11": "KOSDAQ"}

US_STOCKS = [
  "AAPL","MSFT","GOOGL","AMZN","NVDA","META","TSLA","BRK-B","JPM","V",
  "JNJ","UNH","WMT","MA","PG","HD","XOM","CVX","LLY","ABBV",
  "PFE","KO","PEP","MRK","COST","AVGO","AMD","ORCL","CRM","NFLX",
  "ADBE","CSCO","ACN","TXN","INTC","QCOM","INTU","AMAT","BKNG","ISRG",
  "MDLZ","ADP","REGN","VRTX","GILD","PANW","LRCX","MU","KLAC","SNPS",
]

KR_STOCKS = {  # 코드: 이름 (섹터는 아래 어휘로 네가 매핑)
  "005930":"Samsung Electronics","000660":"SK Hynix","373220":"LG Energy Solution",
  "005380":"Hyundai Motor","000270":"Kia","207940":"Samsung Biologics",
  "006400":"Samsung SDI","035420":"NAVER","035720":"Kakao","005490":"POSCO Holdings",
  "068270":"Celltrion","028260":"Samsung C&T","105560":"KB Financial","055550":"Shinhan Financial",
  "012330":"Hyundai Mobis","066570":"LG Electronics","003670":"POSCO Future M","051910":"LG Chem",
  "096770":"SK Innovation","034730":"SK","000810":"Samsung Fire","003550":"LG",
  "032830":"Samsung Life","009150":"Samsung Electro","086790":"Hana Financial","010130":"Korea Zinc",
  "033780":"KT&G","011200":"HMM","247540":"Ecopro BM","377300":"Kakao Pay",
  "030200":"KT","017670":"SK Telecom","018260":"Samsung SDS","036570":"NCsoft",
  "316140":"Woori Financial","003490":"Korea Shipbuilding","034020":"Doosan Enerbility",
  "011170":"Lotte Chemical","024110":"Industrial Bank of Korea","010950":"S-Oil",
  "006800":"Mirae Asset Securities","004020":"Hyundai Steel","000720":"Hyundai E&C",
  "002790":"Amore Pacific","138040":"Meritz Financial","259960":"Krafton",
  "326030":"SK Biopharm","323410":"Kakao Bank","361610":"SK IE Technology","352820":"Hive",
}
KR 섹터 어휘: Semiconductor, Battery, Auto, Auto Parts, Bio, Internet, Steel, Holding, Financial,
Insurance, Securities, Fintech, Electronics, Materials, Chemical, Energy, Telecom, IT Services,
Gaming, Shipbuilding, Industrial, Shipping, Construction, Cosmetics, Entertainment, Tobacco,
Non-Ferrous, Components

INDICATORS = {  # 심볼: (이름, 단위)
  "CL=F": ("WTI Oil","$"), "GC=F": ("Gold","$"), "SI=F": ("Silver","$"), "HG=F": ("Copper","$"),
  "EURUSD=X": ("EUR/USD",""), "KRW=X": ("USD/KRW","W"), "JPY=X": ("USD/JPY",""),
  "CNY=X": ("USD/CNY",""), "^TNX": ("US 10Y","%"), "BTC-USD": ("Bitcoin","$"), "ETH-USD": ("Ethereum","$"),
}

SECTOR_INDICATOR_MAP = {  # 종목 섹터 -> 관련 지표 (Detail의 관련 지표 매핑)
  "Technology": ["^IXIC","BTC-USD"], "Semiconductor": ["^IXIC","BTC-USD"],
  "Internet": ["^IXIC","BTC-USD"], "Communication": ["^IXIC","BTC-USD"],
  "Energy": ["CL=F","HG=F"], "Chemical": ["CL=F","HG=F"], "Materials": ["CL=F","HG=F"],
  "Financial": ["^TNX","EURUSD=X"], "Insurance": ["^TNX","EURUSD=X"], "Fintech": ["^TNX","BTC-USD"],
  "Consumer": ["GC=F","EURUSD=X"], "Auto": ["KRW=X","CL=F"], "Healthcare": ["GC=F","^TNX"],
  "Bio": ["GC=F","^TNX"], "Battery": ["HG=F","SI=F"], "Steel": ["HG=F","CNY=X"],
  "Telecom": ["^TNX","KRW=X"], "Holding": ["^TNX","KRW=X"], "Electronics": ["^IXIC","KRW=X"],
}

NEWS_FEEDS = {
  "yahoo": "https://finance.yahoo.com/news/rssindex",
  "yahoo_markets": "https://feeds.finance.yahoo.com/rss/2.0/headline?s=^GSPC&region=US&lang=en-US",
  "hankyung": "https://www.hankyung.com/feed/economy",
  "mk": "https://www.mk.co.kr/rss/30100041/",
}
자동화 옵션, auto mode 세션에 auto mode on을 선언해 두면 superpowers가 brainstorming → write-plan → execute-plan의 단계 전환과 승인 대기를 자동으로 이어 갑니다. 시간이 빠듯할 때 유용합니다. 단계마다 직접 검토하려면 기본(수동)을 유지하고, 되돌리려면 auto mode off입니다.

브레인스토밍 후 /superpowers:write-plan으로 계획을 만들고 Phase 4개 구성을 승인하세요. venv 생성과 라이브러리 설치도 Phase 1에서 Claude가 수행합니다. 계획이 위 구현 청사진(화면/모듈/데이터 계약)과 대체로 합치하는지, 그리고 요구 9조항의 후순위 규칙(시간 부족 시 호가/투자자 동향, Article을 뒤로)이 반영됐는지 확인하세요.

CHECKPOINT
MISSION 02

Phase 1, 시세 서비스와 종목 테이블

30분

yfinance(US)와 pykrx(KR)를 물린 시세 서비스, 그리고 US/KR 탭 종목 테이블까지.

Claude 세션 입력
/superpowers:execute-plan Phase 1만 구현하고 멈춰줘. venv + requirements.txt, 모듈 구조 스캐폴드, config.py(US 30 + KR 30 종목과 섹터), services의 US(yfinance)/KR(pykrx) 시세 서비스(개별 실패 스킵), Dashboard의 종목 테이블(US/KR 탭 전환, 요구 3의 컬럼과 등락 색)까지. 끝나면 실행 방법을 알려줘.
Terminal, 실행
source .venv/bin/activate && python app.py

터미널이 그대로 앱 화면이 됩니다. Q로 종료하고 다음 Phase로. KR 종목이 0원이면 장 마감 시간의 정상 동작입니다(pykrx는 장중에 갱신됩니다).

막힐 때 열어보기, 시세 서비스 핵심 힌트
services 골격 (참고 조각)
import yfinance as yf
def fetch_quotes(symbols: list[str]) -> list[dict]:
    out = []
    for s in symbols:
        try:
            info = yf.Ticker(s).fast_info
            out.append({"symbol": s, "price": info.last_price,
                        "prev": info.previous_close,
                        "volume": info.last_volume})
        except Exception:
            continue   # 개별 실패는 건너뛴다
    return out
DEFINITION OF DONE
MISSION 03

Phase 2 + 3, 대시보드 6요소와 Detail 풀스펙

50분

지표 바, 지수 카드, 시장 요약과 섹터 등락(Insight), 뉴스 피드로 대시보드를 완성하고, Detail을 풀스펙으로 붙입니다.

Claude 세션 입력, Phase 2
/superpowers:execute-plan Phase 2만 구현해줘. 경제지표 바(요구 2의 11종), 시장지수 카드(US 3 + KR 2), 시장 요약(US/KR 상승/하락 종목수, Top 3 상승/하락 종목명+등락률+거래량, 거래량 리더 Top 3), 섹터별 평균 등락률 바 차트, RSS 뉴스 피드, 4-Wave 로딩과 자동 갱신(주가 45초, 뉴스 120초), footer 키 도움말까지.
Claude 세션 입력, Phase 3
/superpowers:execute-plan Phase 3(Detail 풀스펙)을 구현해줘. Enter 진입: 가격 헤더(거래량 평균 대비 배율, 1.5x 이상 빨강/1.0x 이상 노랑), 핵심 지표(Market Cap, PER, EPS, Beta/PBR, Vol, Avg Vol), 차트(1W/1M/3M/1Y 스파크라인 + MA5/MA20 + 골든/데드크로스 신호, 1~4와 좌우 화살표로 기간 전환), 호가 10단계(매도 파랑/매수 빨강, 시뮬레이션), 투자자 동향(개인/외국인/기관 10일, 시뮬레이션), 기간별 수익률 4종, 종목 섹터 기반 관련 경제지표 매핑, B/Escape 복귀까지.
이 미션의 3대 함정 ① 자동 갱신마다 화면이 깜빡인다 = 전체 리렌더 대신 위젯 update로, Textual의 reactive를 쓰라고 주문하세요. ② 일부 종목이 빈다 = yfinance/pykrx 간헐 응답, 개별 실패 스킵 덕에 나머지는 산다, R로 재시도. ③ 골든크로스가 안 보인다 = MA 계산에 최소 20일 데이터가 필요, 차트 기간을 1M 이상으로 두고 확인.
DEFINITION OF DONE
MISSION 04

Phase 4, AI 분석과 개장

30분

A 키의 종목 분석 3줄과 뉴스 Article 화면(요약, 시장 영향, 인사이트, 관련 종목, 영한 번역)까지 붙이면 데스크 완성입니다.

Claude 세션 입력
/superpowers:execute-plan Phase 4(AI)를 구현해줘. services/bedrock.py: Converse(global.anthropic.claude-sonnet-4-6, maxTokens 600), 인증은 환경변수 AWS_BEARER_TOKEN_BEDROCK(boto3 클라이언트에 자격 인자 없이), 리전 ap-northeast-2, Bedrock IAM 정책 금지, 키 없으면 AI만 비활성. ① Detail의 A 키: 기술적 분석/투자 포인트/리스크 요인 한국어 3줄. ② 뉴스에서 Enter → Article 화면: 기사 본문 추출(httpx) 후 요약, 시장 영향 분석, 투자 인사이트, 관련 종목 도출, 영어 기사는 한국어로 번역 후 분석.
Terminal, 키 로드 후 실행
set -a; source ~/capstone/.env; set +a   # Bearer 키 로드
source .venv/bin/activate && python app.py
A 키가 침묵하거나 인증 에러라면 ① 앱을 띄운 셸에 키가 로드됐는지(위 로드 라인 후 재실행) ② 401/UnrecognizedClient는 키 오탈자나 만료 ③ AccessDenied는 발급 계정의 모델 액세스 미승인. 시세 화면이 멀쩡하면 인증 문제로 좁혀집니다.

지표 바에서 골든크로스, 호가, Article까지 한 바퀴 돌리고, 터미널 스크린샷을 Slack에 공유하세요. 그게 개장입니다. 시간이 남는다면 아래 바이브 코딩 라운드로 원작의 완성 화면 수준까지 마감을 끌어올려 보세요.

DEFINITION OF DONE
BONUS

바이브 코딩 라운드, 완성 화면까지 밀어붙이기

+α 자유

Phase 빌드가 끝났다면 이제 바이브 코딩입니다: 스펙 문서 대신 완성 화면의 묘사를 주고 "이렇게 나오게 해줘"를 반복하는 루프. 아래 세 장면은 원작이 실제로 도달한 화면을 글로 옮긴 것입니다. 내 화면과 다른 점을 찾아 하나씩 주문하세요.

1장면 A, Dashboard의 마감 디테일
타깃 묘사, 프롬프트에 붙여 쓰세요
- 타이틀 바: 중앙 "Global Stock Monitor - US & KR Markets", 우측 상단 현재 시각
- 지수 카드 5장(S&P 500, NASDAQ, DOW, KOSPI, KOSDAQ): 카드 보더 색이 등락을 따른다
  (하락 파랑, 상승 빨강 계열), 값 옆 ▲▼와 등락률
- 시장 요약 한 줄 포맷: "US: 상승 30 하락 20 | KR: 상승 0 하락 0",
  Top▲/Top▼ 종목은 "Netflix(NFLX) +13.77% [200.4M]"처럼 등락률과 [거래량]을 함께,
  거래량 리더 줄은 번개 이모지로 시작
- 섹터 바 두 줄: US 섹터(Communication +13.8% ...), KR 섹터(Semiconductor ...) 등락률 + 색 막대
- 종목 테이블 탭: "US Stocks (50)" / "KR Stocks (50)", 행 끝에 ▲▼ 방향 표시
- 뉴스 피드: "[Yahoo] [EN] 제목 ... 2026-03-02T11:08" 형식, 소스는 빨강
- footer: "Updated: 11:29:23 | Next refresh in 45s" + 좌하단 "r Refresh  q Quit" + 우하단 "^p palette"
2장면 B, Detail의 마감 디테일
타깃 묘사, 프롬프트에 붙여 쓰세요
- 종목 헤더: "035420 NAVER" + "254,500원 ▼ -6,000 (-2.30%)" + "Vol: 1.2M (1.0x avg)"
  거래량 배율은 1.5x 이상 빨강, 1.0x 이상 노랑
- 핵심 지표 한 줄 6칸: Market Cap, PER, EPS, PBR, Volume, Avg Vol (라벨은 흐리게, 값은 굵게)
- 차트 상단 기간 탭: "[1]W [2]M [3]3M [4]Y [Left/Right]", 활성 기간은 하이라이트
- 차트 아래 요약 두 줄: "Period: 1Y  Open: 222,000  Current: 254,500  Change: +32,500 (+14.64%)"
  "Low / High / Range 날짜" 그리고 "MA5: 255,700  MA20: 260,125  ▼ Dead Cross"
  (골든크로스는 ▲ 초록, 데드크로스는 ▼ 노랑/빨강)
- 좌측 호가: "매도잔량 | 가격 | 매수잔량" 3열, 매도 10단계 파랑 막대는 왼쪽으로,
  매수 10단계 빨강 막대는 오른쪽으로 자란다
- 우측 패널 2개: Price Info(Open/High/Low/Prev Close), Trading Info(Volume/Avg Vol/Day Range/Sector)
- 그 아래: 52 Week Range 바(Low 176,200 ~ High 295,000), 수익률 한 줄(1W/1M/3M/1Y),
  투자자 동향 표(날짜/개인/외국인/기관 10일, 순매수 초록 / 순매도 빨강), 관련 지표 줄(예: Bitcoin 가격)
- footer: "b Back  r Refresh  p Next Period  a AI Analysis  q Quit"
3장면 C, AI 화면의 마감 디테일
타깃 묘사, 프롬프트에 붙여 쓰세요
- AI 종목 분석(A 토글): "## 기술적 분석 / ## 투자 포인트 / ## 리스크 요인" 세 절,
  포인트와 리스크는 굵은 키워드로 시작하는 불릿 3개씩
- Article 화면 헤더: 기사 제목 아래 "[Yahoo]  Mon, 02 Mar 2026  |  English -> 한국어 번역"
  그리고 크레딧 줄 "AI Analysis (Powered by Claude Sonnet 4.6 via Amazon Bedrock)"
- 본문 구성 순서: "한국어 번역" 문단 → "요약" 이모지 불릿 5개 → "분석"
  (글로벌 시장 영향은 "구분 | 내용" 2열 표, 한국 시장 영향은 굵은 키워드 불릿)
  → "투자 인사이트" (핵심 투자 포인트 1. 2. 3. 번호 목록, 각 항목에 인용 바)
- 섹션 제목은 파란 링크 톤, 구분선으로 절을 나눈다
4루프 돌리기
Claude 세션 입력, 바이브 프롬프트 예시
지금 Dashboard를 아래 타깃 묘사에 맞게 다듬어줘. 한 번에 전부 말고,
지수 카드 보더 색 → 시장 요약 한 줄 포맷 → footer 순서로 하나씩 보여주며 진행해.
[장면 A 묘사 붙여넣기]
바이브 코딩의 요령 ① 한 번에 한 화면, 한 번에 한 디테일. ② 실행해 보고 다른 점을 말로 알려주는 반복이 핵심입니다, "호가 막대가 반대로 자란다"처럼. ③ 마음에 든 순간마다 커밋해 되돌아갈 지점을 만드세요. 스펙은 방향을 잡고, 바이브는 마감을 만듭니다. 둘 다 쓰는 사람이 빠릅니다.
BONUS DONE, 진행률 미집계
OPTION

하네스 엔지니어링, 작품을 성숙시키고 등급을 받다

+15분 옵션

지금까지 만든 것은 결과물입니다. 이 옵션은 그 결과물을 만든 작업 환경, 즉 하네스 (CLAUDE.md, hooks, skills, commands, agents)를 표준 구조로 성숙시키고(project-init), 그 품질을 6개 차원(정확성, 안전성, 완전성, 실행 가능성, 일관성, 검증 가능성)에서 채점받는(harness-eval) 단계입니다. superpowers의 3단(brainstorm, write-plan, execute-plan) 뒤에 4단 성숙화와 5단 평가를 붙이는 셈입니다. 캡스톤 공통의 마무리 의식입니다.

1플러그인 2종 설치
Terminal, 전체 복사
claude plugin marketplace add https://github.com/whchoi98/project-init
claude plugin install project-init@project-init
claude plugin marketplace add https://github.com/whchoi98/harness-eval
claude plugin install harness-eval@harness-eval
claude plugin list

설치 후 새 Claude 세션을 시작하세요, superpowers 때와 같은 규칙입니다.

2성숙화, /init-project와 /sync-docs
Claude 세션 입력 (새 세션, worktree에서)
/init-project .

TUI 프로젝트의 하네스는 아직 얇습니다(Textual 앱 하나). 기존 프로젝트 감지 모드가 있는 것은 보존하고, 없는 것(문서 스캐폴딩, 시크릿 스캔 훅, /review 커맨드, 테스트 골격 등)만 채웁니다. CLAUDE.md가 이미 있으면 덮어쓰기 전에 물어봅니다. 끝나면 이어서:

Claude 세션 입력
/sync-docs
출력 예시 (요약)
## Sync Report
### Quality Scores (Before -> After)
| ./CLAUDE.md           | D (48) | B (82) | +34 |
| ./services/CLAUDE.md  | F (10) | C (61) | +51 |
### Changes Made
- Files created: 4 / Files updated: 2 / Runbooks missing: 1
3평가, /harness-eval로 등급 받기
Claude 세션 입력
/harness-eval:quick
출력 예시
{"mode": "quick", "scores": {"overall": 7.0, "grade": "B"}, "checklist": {"pass": 12, "warn": 3, "fail": 1}}

이 캡스톤의 비자명한 지식은 데이터 계약입니다. "왜 개별 심볼 실패를 건너뛰는가, 왜 호가는 시뮬레이션인가, 왜 키가 없어도 앱은 살아야 하는가"를 CLAUDE.md의 패턴으로 기록해 두면 sync-docs 점수가 오르고, 다음에 이 저장소를 여는 Claude가 같은 원칙으로 확장합니다. 여유가 있다면 결정을 기록으로 남기세요:

Claude 세션 입력
/add-adr graceful-degradation
/add-runbook market-tui-run
시간과 신뢰 가드 잔여 시간이 빠듯하면 설치와 /harness-eval:quick(30초 체크리스트)만으로 충분합니다, /init-project는 17단계라 수 분이 걸립니다. /harness-eval:standard의 동적 분석은 대상 프로젝트의 훅과 테스트를 실제로 실행합니다. 방금 본인이 만든 프로젝트라 안전하지만, 남의 저장소를 평가할 때는 --static-only 플래그가 예의이자 안전입니다.
OPTION DONE, 진행률 미집계

미션 종료

브라우저 없이도 데스크는 완성됩니다. 터미널은 생각보다 넓습니다.

가져가는 것내용
부분 실패 설계수십 개 심볼 중 몇이 죽어도 화면은 산다, 모니터는 완벽보다 생존
우아한 성능 저하키가 없으면 AI만 꺼진다, 실데이터가 없으면 시뮬레이션으로, 기능 하나가 앱을 볼모로 잡지 않게
웨이브 로딩빠른 것부터 즉시 보여주고 무거운 것은 뒤로, 체감 성능은 순서 설계에서 나온다
NEXT

포털로

완성형 레퍼런스 stock-on-tui와 비교해 보고, 워크샵 포털에서 다음 미션을 고르세요.