목표물과 기조
숙지다른 캡스톤과 같은 기조입니다: 빈 폴더에서 superpowers 워크플로로 설계하고 Phase 단위로 빌드합니다. 목표물은 풀스펙 터미널 시황 데스크, 완성형 레퍼런스로 원작 stock-on-tui가 있습니다. 클론하지 않습니다, 막혔을 때 훔쳐보는 지도일 뿐입니다.
| 화면 | 구성 | 핵심 원칙 |
|---|---|---|
| Dashboard | 경제지표 11종 바, US/KR 지수 카드, 시장 요약(Top 상승/하락/거래량), 섹터 등락 바, 종목 테이블(US/KR 탭), 뉴스 피드 | 4-Wave 로딩, 빠른 것부터 즉시 표시, 45초/120초 자동 갱신 |
| Detail | 가격 헤더(거래량 배율 색), 핵심 지표(PER/EPS/Beta), MA5/MA20 + 골든/데드크로스 차트(1W~1Y), 호가 10단계, 투자자 동향, 기간 수익률, 관련 지표 매핑 | 호가와 투자자 동향은 시뮬레이션, 공개 실데이터가 없는 것은 그럴듯하게 |
| Article + AI | A 키 종목 분석 3줄, 뉴스 Enter로 기사 요약/시장 영향/인사이트/관련 종목, 영어 기사는 한국어 번역 후 분석 | AWS_BEARER_TOKEN_BEDROCK 인증, 키 없으면 AI만 꺼지고 앱은 산다 |
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을 통한 요약, 분석, 투자 인사이트, 관련 종목 도출 |
| 영한 번역 | 영어 기사는 자동으로 한국어 번역 + 분석 제공 |
구현 청사진, 원작 상세 분석
참고원작 저장소를 분석해 뽑은 구현 지도입니다. M1 설계와 각 Phase에서 Claude가 이 구조로 수렴하도록 방향을 잡아 주고, 계획이 이상하게 흐르면 여기로 돌아와 대조하세요.
| 화면 | 구성 위젯 | 전환 |
|---|---|---|
| DashboardScreen | IndicatorBar(경제지표), MarketCards(지수), MarketSummary(시장 요약), SectorBar(섹터 등락), StockTable(US/KR 탭), NewsFeed(뉴스) | 종목 행 Enter/클릭 → Detail |
| DetailScreen | RichChart(MA5/MA20 + 크로스 신호), OrderBook(호가), InvestorTrends(투자자 동향), PeriodReturns(기간 수익률), RelatedIndicators(관련 지표), AI Analysis 패널 | 뉴스 Enter → Article, B/Escape → 복귀 |
| ArticleScreen | 기사 본문 + AI 분석(Markdown 뷰, 번역/요약/분석/인사이트) | B/Escape → 복귀 |
| 모듈 | 파일 | 책임 |
|---|---|---|
| 진입/설정 | 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 | 다크 테마 단일 스타일시트, 색과 폭은 전부 여기서 |
| 계약 | 내용 |
|---|---|
| 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 기능만 비활성, 시세/차트/뉴스는 전부 정상 |
| 상수 | 값 |
|---|---|
| 갱신 주기 | 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) |
| 패키지 | 버전 | 용도 |
|---|---|---|
| textual | >= 0.40.0 | TUI 프레임워크 (위젯, 레이아웃, 이벤트) |
| yfinance | >= 0.2.31 | 미국 주식, 지수, 경제지표 |
| pykrx | >= 1.0.45 | 한국 주식, 지수 (KRX) |
| httpx | >= 0.25.0 | RSS 수집과 기사 본문 추출 |
| boto3 | >= 1.28.0 | Bedrock AI (선택, 없어도 앱은 동작) |
| 항목 | 원작 구현 |
|---|---|
| 함수 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 기능을 사용할 수 없습니다 + 설정 방법")만 표시, 앱은 정상 |
AWS_BEARER_TOKEN_BEDROCK을 boto3가 자동 인식하게 하고(자격 인자 없이),
리전 ap-northeast-2, 모델 global.anthropic.claude-sonnet-4-6,
호출은 Converse API. 원작과 비교하며 "왜 이쪽이 표준인가"를 이야기해 보는 것도 좋은 학습입니다.
원작 다이어그램 원문, Screen Flow와 4-Wave
DashboardScreen --(Row Click/Enter)--> DetailScreen --(Enter on News)--> ArticleScreen
^ | ^ |
+----------- B / Escape -----------+ +--------- B / Escape ---------+
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초 주기)
사전 준비
10분Python 확인, 프로젝트 폴더, 그리고 Bearer 키(.env)까지. AI 기능(Phase 4)에 필요합니다.
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는 건너뛰세요.
mkdir -p ~/capstone
cat > ~/capstone/.env << 'ENVEOF'
AWS_BEARER_TOKEN_BEDROCK=<발급받은 Bedrock API 키>
ENVEOF
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
설계, 브레인스토밍
15분화면 3개, 데이터 소스 3종, Insight와 Detail 풀스펙, 키 바인딩까지 요구 9조항으로 넘깁니다.
cd ~/capstone/market-tui && claude
/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을 후순위로 미룬다
결정이 필요하면 이 범위 안에서 최소한으로만 물어봐.
이어서, 방금 설계에 쓸 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®ion=US&lang=en-US",
"hankyung": "https://www.hankyung.com/feed/economy",
"mk": "https://www.mk.co.kr/rss/30100041/",
}
auto mode on을 선언해 두면 superpowers가
brainstorming → write-plan → execute-plan의 단계 전환과 승인 대기를 자동으로 이어 갑니다.
시간이 빠듯할 때 유용합니다. 단계마다 직접 검토하려면 기본(수동)을 유지하고, 되돌리려면
auto mode off입니다.
브레인스토밍 후 /superpowers:write-plan으로 계획을 만들고
Phase 4개 구성을 승인하세요. venv 생성과 라이브러리 설치도 Phase 1에서 Claude가 수행합니다.
계획이 위 구현 청사진(화면/모듈/데이터 계약)과 대체로 합치하는지, 그리고 요구 9조항의 후순위 규칙(시간 부족 시 호가/투자자 동향, Article을 뒤로)이 반영됐는지 확인하세요.
Phase 1, 시세 서비스와 종목 테이블
30분yfinance(US)와 pykrx(KR)를 물린 시세 서비스, 그리고 US/KR 탭 종목 테이블까지.
/superpowers:execute-plan Phase 1만 구현하고 멈춰줘. venv + requirements.txt, 모듈 구조 스캐폴드, config.py(US 30 + KR 30 종목과 섹터), services의 US(yfinance)/KR(pykrx) 시세 서비스(개별 실패 스킵), Dashboard의 종목 테이블(US/KR 탭 전환, 요구 3의 컬럼과 등락 색)까지. 끝나면 실행 방법을 알려줘.
source .venv/bin/activate && python app.py
터미널이 그대로 앱 화면이 됩니다. Q로 종료하고 다음 Phase로.
KR 종목이 0원이면 장 마감 시간의 정상 동작입니다(pykrx는 장중에 갱신됩니다).
막힐 때 열어보기, 시세 서비스 핵심 힌트
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
Phase 2 + 3, 대시보드 6요소와 Detail 풀스펙
50분지표 바, 지수 카드, 시장 요약과 섹터 등락(Insight), 뉴스 피드로 대시보드를 완성하고, Detail을 풀스펙으로 붙입니다.
/superpowers:execute-plan Phase 2만 구현해줘. 경제지표 바(요구 2의 11종), 시장지수 카드(US 3 + KR 2), 시장 요약(US/KR 상승/하락 종목수, Top 3 상승/하락 종목명+등락률+거래량, 거래량 리더 Top 3), 섹터별 평균 등락률 바 차트, RSS 뉴스 피드, 4-Wave 로딩과 자동 갱신(주가 45초, 뉴스 120초), footer 키 도움말까지.
/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 복귀까지.
Phase 4, AI 분석과 개장
30분A 키의 종목 분석 3줄과 뉴스 Article 화면(요약, 시장 영향, 인사이트, 관련 종목, 영한 번역)까지 붙이면 데스크 완성입니다.
/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) 후 요약, 시장 영향 분석, 투자 인사이트, 관련 종목 도출, 영어 기사는 한국어로 번역 후 분석.
set -a; source ~/capstone/.env; set +a # Bearer 키 로드
source .venv/bin/activate && python app.py
지표 바에서 골든크로스, 호가, Article까지 한 바퀴 돌리고, 터미널 스크린샷을 Slack에 공유하세요. 그게 개장입니다. 시간이 남는다면 아래 바이브 코딩 라운드로 원작의 완성 화면 수준까지 마감을 끌어올려 보세요.
바이브 코딩 라운드, 완성 화면까지 밀어붙이기
+α 자유Phase 빌드가 끝났다면 이제 바이브 코딩입니다: 스펙 문서 대신 완성 화면의 묘사를 주고 "이렇게 나오게 해줘"를 반복하는 루프. 아래 세 장면은 원작이 실제로 도달한 화면을 글로 옮긴 것입니다. 내 화면과 다른 점을 찾아 하나씩 주문하세요.
- 타이틀 바: 중앙 "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"
- 종목 헤더: "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"
- 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. 번호 목록, 각 항목에 인용 바)
- 섹션 제목은 파란 링크 톤, 구분선으로 절을 나눈다
지금 Dashboard를 아래 타깃 묘사에 맞게 다듬어줘. 한 번에 전부 말고,
지수 카드 보더 색 → 시장 요약 한 줄 포맷 → footer 순서로 하나씩 보여주며 진행해.
[장면 A 묘사 붙여넣기]
하네스 엔지니어링, 작품을 성숙시키고 등급을 받다
+15분 옵션지금까지 만든 것은 결과물입니다. 이 옵션은 그 결과물을 만든 작업 환경, 즉 하네스 (CLAUDE.md, hooks, skills, commands, agents)를 표준 구조로 성숙시키고(project-init), 그 품질을 6개 차원(정확성, 안전성, 완전성, 실행 가능성, 일관성, 검증 가능성)에서 채점받는(harness-eval) 단계입니다. superpowers의 3단(brainstorm, write-plan, execute-plan) 뒤에 4단 성숙화와 5단 평가를 붙이는 셈입니다. 캡스톤 공통의 마무리 의식입니다.
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 때와 같은 규칙입니다.
/init-project .
TUI 프로젝트의 하네스는 아직 얇습니다(Textual 앱 하나). 기존 프로젝트 감지 모드가 있는 것은 보존하고, 없는 것(문서 스캐폴딩, 시크릿 스캔 훅, /review 커맨드, 테스트 골격 등)만 채웁니다. CLAUDE.md가 이미 있으면 덮어쓰기 전에 물어봅니다. 끝나면 이어서:
/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
/harness-eval:quick
{"mode": "quick", "scores": {"overall": 7.0, "grade": "B"}, "checklist": {"pass": 12, "warn": 3, "fail": 1}}
이 캡스톤의 비자명한 지식은 데이터 계약입니다. "왜 개별 심볼 실패를 건너뛰는가, 왜 호가는 시뮬레이션인가, 왜 키가 없어도 앱은 살아야 하는가"를 CLAUDE.md의 패턴으로 기록해 두면 sync-docs 점수가 오르고, 다음에 이 저장소를 여는 Claude가 같은 원칙으로 확장합니다. 여유가 있다면 결정을 기록으로 남기세요:
/add-adr graceful-degradation
/add-runbook market-tui-run
미션 종료
브라우저 없이도 데스크는 완성됩니다. 터미널은 생각보다 넓습니다.
| 가져가는 것 | 내용 |
|---|---|
| 부분 실패 설계 | 수십 개 심볼 중 몇이 죽어도 화면은 산다, 모니터는 완벽보다 생존 |
| 우아한 성능 저하 | 키가 없으면 AI만 꺼진다, 실데이터가 없으면 시뮬레이션으로, 기능 하나가 앱을 볼모로 잡지 않게 |
| 웨이브 로딩 | 빠른 것부터 즉시 보여주고 무거운 것은 뒤로, 체감 성능은 순서 설계에서 나온다 |