kiwoom-cli 2.0.0__tar.gz → 2.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/PKG-INFO +95 -51
  2. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/README.md +94 -49
  3. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/__init__.py +1 -1
  4. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/auth.py +1 -1
  5. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/order.py +20 -20
  6. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/exchange.py +3 -4
  7. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/order_ops.py +5 -5
  8. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/config.py +69 -28
  9. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/formatters.py +13 -1
  10. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/main.py +90 -75
  11. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/streaming.py +8 -8
  12. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/PKG-INFO +95 -51
  13. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/SOURCES.txt +3 -2
  14. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/requires.txt +0 -1
  15. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/pyproject.toml +0 -1
  16. kiwoom_cli-2.1.1/tests/test_auth_cli.py +112 -0
  17. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_cli.py +25 -0
  18. kiwoom_cli-2.1.1/tests/test_credentials.py +144 -0
  19. kiwoom_cli-2.1.1/tests/test_json_purity.py +82 -0
  20. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_migration.py +22 -21
  21. kiwoom_cli-2.0.0/kiwoom_cli/secure_store.py +0 -133
  22. kiwoom_cli-2.0.0/tests/test_secure_store.py +0 -137
  23. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/LICENSE +0 -0
  24. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/api_spec.py +0 -0
  25. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/client.py +0 -0
  26. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/__init__.py +0 -0
  27. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/_constants.py +0 -0
  28. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/account.py +0 -0
  29. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/dashboard.py +0 -0
  30. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/market.py +0 -0
  31. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/stock.py +0 -0
  32. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/stream.py +0 -0
  33. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/__init__.py +0 -0
  34. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/_constants.py +0 -0
  35. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/account_ops.py +0 -0
  36. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/detect.py +0 -0
  37. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/stock_ops.py +0 -0
  38. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/watch.py +0 -0
  39. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/output.py +0 -0
  40. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/dependency_links.txt +0 -0
  41. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/entry_points.txt +0 -0
  42. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/top_level.txt +0 -0
  43. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/setup.cfg +0 -0
  44. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_account.py +0 -0
  45. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_auth.py +0 -0
  46. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_client.py +0 -0
  47. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_formatters.py +0 -0
  48. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_formatters_property.py +0 -0
  49. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_market.py +0 -0
  50. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_order.py +0 -0
  51. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_stock.py +0 -0
  52. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_us.py +0 -0
  53. {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_us_account.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kiwoom-cli
3
- Version: 2.0.0
3
+ Version: 2.1.1
4
4
  Summary: User-friendly CLI for the Kiwoom Securities REST API (키움증권)
5
5
  License: LicenseRef-kiwoom-cli-Source-Available-1.0
6
6
  Project-URL: Homepage, https://github.com/gejyn14/kiwoom-cli
@@ -26,7 +26,6 @@ Requires-Dist: tomli>=2.0; python_version < "3.11"
26
26
  Requires-Dist: tomli-w>=1.0
27
27
  Requires-Dist: keyring>=25.0
28
28
  Requires-Dist: websockets>=12.0
29
- Requires-Dist: cryptography>=42.0
30
29
  Provides-Extra: dev
31
30
  Requires-Dist: pytest>=8.0; extra == "dev"
32
31
  Requires-Dist: pytest-httpx>=0.30; extra == "dev"
@@ -38,30 +37,59 @@ Dynamic: license-file
38
37
 
39
38
  # kiwoom-cli
40
39
 
41
- 키움증권 REST API 터미널에서 사용하기 위한 CLI 도구.
40
+ **키움증권 REST API 전체를 터미널에서.** 시세 조회부터 주문, 실시간 스트리밍, 미국주식까지 — 명령어 하나로.
42
41
 
43
- - 207개 API 전체 지원 (188 REST + 19 WebSocket 실시간)
44
- - 종목 조회, 호가, 차트, 계좌, 주문, 순위, 업종, 테마, ETF, ELW, 금현물
45
- - 출력 형식: Rich 테이블 / JSON / CSV (`-f json`, `-f csv`)
46
- - 실시간 WebSocket 스트리밍 (체결, 호가, VI, 잔고 등)
47
- - AI 에이전트 친화적: 구조화된 JSON 출력, exit code (0/1/2/3)
48
-
49
- ## 설치
42
+ [![PyPI](https://img.shields.io/pypi/v/kiwoom-cli)](https://pypi.org/project/kiwoom-cli/)
43
+ [![Python](https://img.shields.io/pypi/pyversions/kiwoom-cli)](https://pypi.org/project/kiwoom-cli/)
44
+ [![CI](https://github.com/gejyn14/kiwoom-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/gejyn14/kiwoom-cli/actions/workflows/ci.yml)
45
+ [![Downloads](https://img.shields.io/pypi/dm/kiwoom-cli)](https://pypi.org/project/kiwoom-cli/)
46
+ [![License](https://img.shields.io/badge/license-Source--Available-blue)](LICENSE)
50
47
 
51
48
  ```bash
52
49
  pip install kiwoom-cli
53
50
  ```
54
51
 
52
+ ```bash
53
+ $ kiwoom stock price 005930 # 삼성전자 현재가
54
+ $ kiwoom order buy NVDA 10 --price 213.04 # 미국주식도 그대로
55
+ $ kiwoom -f json account balance | jq # AI 에이전트·스크립트 친화
56
+ ```
57
+
58
+ ## 왜 kiwoom-cli인가
59
+
60
+ - **236개 API 전체 지원** — REST 217개 + WebSocket 실시간 19종. 시세·차트·계좌·주문·순위·업종·테마·ETF·ELW·금현물·미국주식까지 키움 REST API를 빠짐없이 커버합니다.
61
+ - **프롬프트 제로** — 인증정보는 OS 키체인에 저장되고, 어떤 명령도 비밀번호를 묻지 않습니다. `gh`/`aws`/`docker`와 같은 모델. 크론잡, CI, AI 에이전트가 그대로 돌립니다.
62
+ - **AI 에이전트 퍼스트** — 구조화된 JSON 출력(`-f json`), 일관된 exit code(0/1/2/3), 주문 확인 게이트(`--confirm`). Claude Code, 자동매매 스크립트에 바로 연결됩니다.
63
+ - **미국주식 자동 라우팅** — `005930`은 국내로, `NVDA`는 미국으로. 거래소(NASDAQ/NYSE/AMEX)도 자동 판별. 국내+미국 통합 잔고를 원화 총계로 보여줍니다.
64
+ - **사람에게도 친절** — Rich 테이블, 상승=빨강/하락=파랑 색상, 실시간 TUI 대시보드, shell 자동완성.
65
+ - **246개 테스트 + CI** — Python 3.10–3.13 매트릭스, CodeQL 정적 분석.
66
+
67
+ > 📖 **전체 문서는 [Wiki](https://github.com/gejyn14/kiwoom-cli/wiki)에서** — 설치 가이드, 명령어 레퍼런스, 미국주식·AI 에이전트·멀티 프로필 가이드, 릴리스 노트.
68
+
69
+ ## 최근 업데이트
70
+
71
+ ### v2.1 — 비밀번호 프롬프트 완전 제거 (2026-07)
72
+
73
+ 앱 자체 암호화 계층을 걷어내고 모든 인증정보를 OS 키체인에 직접 저장합니다. `config setup`, `auth login` 어디서도 더 이상 비밀번호를 묻지 않습니다. 기존 사용자는 업그레이드 후 `kiwoom config setup` 한 번만 다시 실행하면 됩니다.
74
+
75
+ ### v2.0 — 미국주식 지원 (2026-07)
76
+
77
+ 미국주식 29개 엔드포인트를 기존 명령 체계에 그대로 통합했습니다. 티커만 입력하면 시장을 자동 판별하므로 미국 주문도 국내 주문과 똑같이 짧습니다. 소수점 가격, stop/stop-limit/vwap/twap 주문유형, 환전(`account exchange`), 국내+미국 통합 계좌 뷰를 지원합니다.
78
+
79
+ 전체 변경 내역: [CHANGELOG](CHANGELOG.md) · [Wiki 릴리스 노트](https://github.com/gejyn14/kiwoom-cli/wiki/Release-Notes)
80
+
55
81
  ## 시작하기
56
82
 
83
+ [키움증권 REST API](https://openapi.kiwoom.com)에서 appkey/secretkey를 발급받은 뒤:
84
+
57
85
  ```bash
58
- # 1. 초기 설정 (appkey, secretkey 입력 + 암호화 비밀번호 설정)
86
+ # 1. 초기 설정 (appkey, secretkey OS 키체인)
59
87
  kiwoom config setup
60
88
 
61
- # 2. 토큰 발급 (비밀번호 확인 후 발급)
89
+ # 2. 토큰 발급
62
90
  kiwoom auth login
63
91
 
64
- # 3. 사용 (토큰 발급 후에는 비밀번호 불필요)
92
+ # 3. 끝. 이후 모든 명령은 프롬프트 없이 동작
65
93
  kiwoom stock info 005930
66
94
  ```
67
95
 
@@ -87,7 +115,7 @@ export KIWOOM_DOMAIN="prod" # prod 또는 mock
87
115
  export KIWOOM_ACCOUNT="1234567" # 선택
88
116
  ```
89
117
 
90
- appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 암호화 저장하세요.
118
+ appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 OS 키체인에 저장하세요.
91
119
 
92
120
  ### 멀티 프로필
93
121
 
@@ -112,17 +140,38 @@ kiwoom -p isa account balance
112
140
  kiwoom -p isa auth login
113
141
  ```
114
142
 
143
+ ## AI 에이전트와 함께 쓰기
144
+
145
+ kiwoom-cli는 AI 에이전트가 도구로 쓰는 것을 처음부터 염두에 두고 설계됐습니다.
146
+
147
+ ```bash
148
+ # 구조화된 JSON — 파싱이 필요 없는 출력
149
+ kiwoom -f json stock info 005930
150
+ kiwoom -f json market rank volume | jq '.[].stk_nm'
151
+
152
+ # 일관된 exit code — 0=성공, 1=입력오류, 2=API오류, 3=인증필요
153
+ kiwoom stock price 005930 || echo "재시도 또는 재인증"
154
+
155
+ # 주문은 기본 확인 게이트, 자동화 시에만 --confirm으로 명시적 스킵
156
+ kiwoom order buy 005930 10 --type market --confirm
157
+ ```
158
+
159
+ - 어떤 명령도 비밀번호·생체인증을 요구하지 않으므로 에이전트 세션이 중간에 멈추지 않습니다.
160
+ - 페이지네이션(연속조회)은 자동 처리 — 에이전트가 커서를 관리할 필요가 없습니다.
161
+ - 자세한 패턴은 [Wiki: AI 에이전트 가이드](https://github.com/gejyn14/kiwoom-cli/wiki/AI-Agents) 참고.
162
+
115
163
  ## 명령어 구조
116
164
 
117
165
  ```
118
- kiwoom [--format table|json|csv] [--no-color]
119
- ├── config 설정 (setup / show / domain)
166
+ kiwoom [--format table|json|csv] [--no-color] [-p 프로필]
167
+ ├── config 설정 (setup / show / domain / profiles)
120
168
  ├── auth 인증 (login / logout / status)
121
169
  ├── stock 종목 조회 (info / orderbook / chart / compare ...)
122
170
  ├── account 계좌 조회 (balance / deposit / returns / pnl ...)
123
171
  ├── order 주문 (buy / sell / modify / cancel / credit / gold)
124
172
  ├── market 시장 정보 (rank / sector / theme / etf / elw / gold)
125
173
  ├── stream 실시간 스트리밍 (quote / orderbook / order / vi ...)
174
+ ├── watch 실시간 종목 모니터링 (TUI)
126
175
  ├── dashboard 대시보드 (계좌 + 거래량 상위 한눈에)
127
176
  └── api Raw API 호출
128
177
  ```
@@ -146,6 +195,7 @@ kiwoom stock sync # 전 시장 종목 리스트 다운로
146
195
  kiwoom stock search 삼성 # 캐시에서 종목 검색
147
196
  kiwoom stock search 삼성 --market kospi # 코스피만 필터
148
197
  kiwoom stock watchlist "005930|000660" # 관심종목
198
+ kiwoom stock compare 005930 000660 # 종목 비교 (최대 여러 종목)
149
199
  ```
150
200
 
151
201
  ### 차트
@@ -198,6 +248,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
198
248
  | `search` | 종목 검색 (캐시 기반, 시장/유형 필터) |
199
249
  | `watchlist` | 관심종목 |
200
250
  | `brokers` | 회원사 리스트 |
251
+ | `compare` | 복수 종목 비교 |
201
252
  | `chart *` | 틱/분봉/일봉/주봉/월봉/년봉, 투자자별 차트 |
202
253
  | `investor *` | 기관매매, 투자자별매매, 프로그램매매 등 10개 |
203
254
  | `analysis *` | 거래상세, 거래량갱신, 매물대, PER, VI, 증권사 등 10개 |
@@ -212,7 +263,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
212
263
 
213
264
  ```bash
214
265
  kiwoom account list # 계좌번호
215
- kiwoom account balance # 잔고 + 보유종목 + 손익
266
+ kiwoom account balance # 잔고 + 보유종목 + 손익 (국내+미국 통합)
216
267
  kiwoom account deposit # 예수금
217
268
  kiwoom account asset # 추정자산
218
269
  kiwoom account today # 당일현황
@@ -254,6 +305,9 @@ kiwoom account orderable amount 005930 --side buy --price 70000
254
305
  | `orderable` | `amount` | 주문가능 금액 |
255
306
  | `orderable` | `margin-qty` | 증거금율별 수량 |
256
307
  | `orderable` | `credit-qty` | 신용보증금율별 수량 |
308
+ | `exchange` | `rate` | 환율 조회 |
309
+ | `exchange` | `estimate` | 환전 예상금액 |
310
+ | `exchange` | `apply` | 환전 신청 |
257
311
  | `history` | `transactions` | 위탁종합 거래내역 |
258
312
  | `history` | `journal` | 당일 매매일지 |
259
313
 
@@ -282,11 +336,13 @@ kiwoom account exchange apply 1000000 --confirm # 원화 → 달러 환전
282
336
  - 정정은 가격만 가능(전량), 취소는 전량 취소만 지원됩니다 (키움 API 제약).
283
337
  - 계좌 조회 명령(`balance/deposit/pnl/orders/history`)은 기본 통합 표시이며 `--market kr|us`로 필터링합니다.
284
338
 
339
+ 자세한 가이드: [Wiki: 미국주식](https://github.com/gejyn14/kiwoom-cli/wiki/US-Stocks)
340
+
285
341
  ---
286
342
 
287
343
  ## order - 주문
288
344
 
289
- 모든 주문에 `--confirm` 필수.
345
+ 주문은 실행 전 미리보기 + 대화형 확인이 기본입니다. 자동화 시에만 `--confirm`으로 스킵하세요.
290
346
 
291
347
  ```bash
292
348
  # 주식
@@ -401,27 +457,13 @@ kiwoom stream types # 타입 코드 목록
401
457
 
402
458
  ---
403
459
 
404
- ## Raw API
405
-
406
- ```bash
407
- kiwoom api ka10001 '{"stk_cd":"005930"}' # 테이블 출력
408
- kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
409
- ```
410
-
411
- ---
412
-
413
- ## dashboard - 대시보드
460
+ ## dashboard / Raw API
414
461
 
415
462
  ```bash
416
463
  kiwoom dashboard # 계좌 요약 + 거래량 상위 한눈에
417
- ```
418
464
 
419
- ## 종목 비교
420
-
421
- ```bash
422
- kiwoom stock compare 005930 000660 # 삼성전자 vs SK하이닉스
423
- kiwoom stock compare 005930 000660 035420 # 3종목 비교
424
- kiwoom -f json stock compare 005930 000660 # JSON 출력
465
+ kiwoom api ka10001 '{"stk_cd":"005930"}' # Raw API — 테이블 출력
466
+ kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
425
467
  ```
426
468
 
427
469
  ---
@@ -467,12 +509,29 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
467
509
  | 2 | API/네트워크 오류 |
468
510
  | 3 | 인증 필요 (토큰 만료) |
469
511
 
512
+ ## 보안
513
+
514
+ 모든 인증정보(appkey, secretkey, 토큰)는 **OS 키체인**(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장됩니다. 파일로 존재하지 않으며, 키체인이 디스크 저장 시 암호화를 담당합니다. `gh`, `aws`, `docker` CLI와 동일한 모델입니다.
515
+
516
+ | 항목 | 저장 방식 | 프롬프트 |
517
+ | ------------------ | ------------------ | :------: |
518
+ | appkey / secretkey | OS 키체인 | X |
519
+ | 토큰 | OS 키체인 | X |
520
+ | config.toml | 도메인, 계좌번호만 | X |
521
+
522
+ - 모든 명령어는 비밀번호/생체인증 프롬프트 없이 동작 (AI 에이전트·자동화 친화적)
523
+ - 앱 자체 암호화 계층은 의도적으로 두지 않음 — 추가 계층은 명령마다 잠금 해제 프롬프트를 요구하게 되어 CLI 사용성을 해침
524
+ - v2.0 이하에서 업그레이드한 경우: 암호화 저장소 형식이 제거되어 `kiwoom config setup`을 한 번 다시 실행해야 합니다
525
+ - 주문은 기본적으로 미리보기 + 대화형 확인을 거칩니다 (`--confirm`으로 스킵)
526
+
527
+ 자세한 내용: [Wiki: 보안 모델](https://github.com/gejyn14/kiwoom-cli/wiki/Security) · [SECURITY.md](SECURITY.md)
528
+
470
529
  ## 참고
471
530
 
472
531
  | 항목 | 값 |
473
532
  | ---------------- | ---------------------------------------- |
474
533
  | 설정 파일 | `~/.kiwoom/config.toml` (도메인, 계좌만) |
475
- | appkey/secretkey | OS 키체인 (암호화 저장) |
534
+ | appkey/secretkey | OS 키체인 |
476
535
  | 토큰 | OS 키체인 |
477
536
  | 캐시 디렉터리 | `~/.kiwoom/cache/` |
478
537
  | 운영 도메인 | `https://api.kiwoom.com` |
@@ -485,21 +544,6 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
485
544
  - 종목코드 6자리: `005930` (삼성전자)
486
545
  - 금현물: `M04020000` (1kg), `M04020100` (미니 100g)
487
546
 
488
- ## 보안
489
-
490
- 인증정보(appkey, secretkey)는 **OS 키체인에 암호화되어 저장**됩니다. 파일로 존재하지 않으며, 비밀번호 없이는 복호화할 수 없습니다.
491
-
492
- | 항목 | 저장 방식 | 비밀번호 필요 |
493
- | ------------------ | ------------------ | :---------------------------------: |
494
- | appkey / secretkey | 암호화 + OS 키체인 | O (`config setup`, `auth login` 시) |
495
- | 토큰 | OS 키체인 (평문) | X (만료되는 값) |
496
- | config.toml | 도메인, 계좌번호만 | X |
497
-
498
- - `config setup` 시 설정한 비밀번호로 appkey/secretkey를 암호화
499
- - `auth login/logout` 시 비밀번호 확인 후 키체인 접근
500
- - 토큰 발급 후 일반 명령어는 비밀번호 없이 사용
501
- - `keyring.get_password()`로 직접 접근해도 암호화된 값만 반환
502
-
503
547
  ## License
504
548
 
505
549
  kiwoom-cli **Source-Available License, Version 1.0** — see [LICENSE](LICENSE).
@@ -1,29 +1,58 @@
1
1
  # kiwoom-cli
2
2
 
3
- 키움증권 REST API 터미널에서 사용하기 위한 CLI 도구.
3
+ **키움증권 REST API 전체를 터미널에서.** 시세 조회부터 주문, 실시간 스트리밍, 미국주식까지 — 명령어 하나로.
4
4
 
5
- - 207개 API 전체 지원 (188 REST + 19 WebSocket 실시간)
6
- - 종목 조회, 호가, 차트, 계좌, 주문, 순위, 업종, 테마, ETF, ELW, 금현물
7
- - 출력 형식: Rich 테이블 / JSON / CSV (`-f json`, `-f csv`)
8
- - 실시간 WebSocket 스트리밍 (체결, 호가, VI, 잔고 등)
9
- - AI 에이전트 친화적: 구조화된 JSON 출력, exit code (0/1/2/3)
10
-
11
- ## 설치
5
+ [![PyPI](https://img.shields.io/pypi/v/kiwoom-cli)](https://pypi.org/project/kiwoom-cli/)
6
+ [![Python](https://img.shields.io/pypi/pyversions/kiwoom-cli)](https://pypi.org/project/kiwoom-cli/)
7
+ [![CI](https://github.com/gejyn14/kiwoom-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/gejyn14/kiwoom-cli/actions/workflows/ci.yml)
8
+ [![Downloads](https://img.shields.io/pypi/dm/kiwoom-cli)](https://pypi.org/project/kiwoom-cli/)
9
+ [![License](https://img.shields.io/badge/license-Source--Available-blue)](LICENSE)
12
10
 
13
11
  ```bash
14
12
  pip install kiwoom-cli
15
13
  ```
16
14
 
15
+ ```bash
16
+ $ kiwoom stock price 005930 # 삼성전자 현재가
17
+ $ kiwoom order buy NVDA 10 --price 213.04 # 미국주식도 그대로
18
+ $ kiwoom -f json account balance | jq # AI 에이전트·스크립트 친화
19
+ ```
20
+
21
+ ## 왜 kiwoom-cli인가
22
+
23
+ - **236개 API 전체 지원** — REST 217개 + WebSocket 실시간 19종. 시세·차트·계좌·주문·순위·업종·테마·ETF·ELW·금현물·미국주식까지 키움 REST API를 빠짐없이 커버합니다.
24
+ - **프롬프트 제로** — 인증정보는 OS 키체인에 저장되고, 어떤 명령도 비밀번호를 묻지 않습니다. `gh`/`aws`/`docker`와 같은 모델. 크론잡, CI, AI 에이전트가 그대로 돌립니다.
25
+ - **AI 에이전트 퍼스트** — 구조화된 JSON 출력(`-f json`), 일관된 exit code(0/1/2/3), 주문 확인 게이트(`--confirm`). Claude Code, 자동매매 스크립트에 바로 연결됩니다.
26
+ - **미국주식 자동 라우팅** — `005930`은 국내로, `NVDA`는 미국으로. 거래소(NASDAQ/NYSE/AMEX)도 자동 판별. 국내+미국 통합 잔고를 원화 총계로 보여줍니다.
27
+ - **사람에게도 친절** — Rich 테이블, 상승=빨강/하락=파랑 색상, 실시간 TUI 대시보드, shell 자동완성.
28
+ - **246개 테스트 + CI** — Python 3.10–3.13 매트릭스, CodeQL 정적 분석.
29
+
30
+ > 📖 **전체 문서는 [Wiki](https://github.com/gejyn14/kiwoom-cli/wiki)에서** — 설치 가이드, 명령어 레퍼런스, 미국주식·AI 에이전트·멀티 프로필 가이드, 릴리스 노트.
31
+
32
+ ## 최근 업데이트
33
+
34
+ ### v2.1 — 비밀번호 프롬프트 완전 제거 (2026-07)
35
+
36
+ 앱 자체 암호화 계층을 걷어내고 모든 인증정보를 OS 키체인에 직접 저장합니다. `config setup`, `auth login` 어디서도 더 이상 비밀번호를 묻지 않습니다. 기존 사용자는 업그레이드 후 `kiwoom config setup` 한 번만 다시 실행하면 됩니다.
37
+
38
+ ### v2.0 — 미국주식 지원 (2026-07)
39
+
40
+ 미국주식 29개 엔드포인트를 기존 명령 체계에 그대로 통합했습니다. 티커만 입력하면 시장을 자동 판별하므로 미국 주문도 국내 주문과 똑같이 짧습니다. 소수점 가격, stop/stop-limit/vwap/twap 주문유형, 환전(`account exchange`), 국내+미국 통합 계좌 뷰를 지원합니다.
41
+
42
+ 전체 변경 내역: [CHANGELOG](CHANGELOG.md) · [Wiki 릴리스 노트](https://github.com/gejyn14/kiwoom-cli/wiki/Release-Notes)
43
+
17
44
  ## 시작하기
18
45
 
46
+ [키움증권 REST API](https://openapi.kiwoom.com)에서 appkey/secretkey를 발급받은 뒤:
47
+
19
48
  ```bash
20
- # 1. 초기 설정 (appkey, secretkey 입력 + 암호화 비밀번호 설정)
49
+ # 1. 초기 설정 (appkey, secretkey OS 키체인)
21
50
  kiwoom config setup
22
51
 
23
- # 2. 토큰 발급 (비밀번호 확인 후 발급)
52
+ # 2. 토큰 발급
24
53
  kiwoom auth login
25
54
 
26
- # 3. 사용 (토큰 발급 후에는 비밀번호 불필요)
55
+ # 3. 끝. 이후 모든 명령은 프롬프트 없이 동작
27
56
  kiwoom stock info 005930
28
57
  ```
29
58
 
@@ -49,7 +78,7 @@ export KIWOOM_DOMAIN="prod" # prod 또는 mock
49
78
  export KIWOOM_ACCOUNT="1234567" # 선택
50
79
  ```
51
80
 
52
- appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 암호화 저장하세요.
81
+ appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 OS 키체인에 저장하세요.
53
82
 
54
83
  ### 멀티 프로필
55
84
 
@@ -74,17 +103,38 @@ kiwoom -p isa account balance
74
103
  kiwoom -p isa auth login
75
104
  ```
76
105
 
106
+ ## AI 에이전트와 함께 쓰기
107
+
108
+ kiwoom-cli는 AI 에이전트가 도구로 쓰는 것을 처음부터 염두에 두고 설계됐습니다.
109
+
110
+ ```bash
111
+ # 구조화된 JSON — 파싱이 필요 없는 출력
112
+ kiwoom -f json stock info 005930
113
+ kiwoom -f json market rank volume | jq '.[].stk_nm'
114
+
115
+ # 일관된 exit code — 0=성공, 1=입력오류, 2=API오류, 3=인증필요
116
+ kiwoom stock price 005930 || echo "재시도 또는 재인증"
117
+
118
+ # 주문은 기본 확인 게이트, 자동화 시에만 --confirm으로 명시적 스킵
119
+ kiwoom order buy 005930 10 --type market --confirm
120
+ ```
121
+
122
+ - 어떤 명령도 비밀번호·생체인증을 요구하지 않으므로 에이전트 세션이 중간에 멈추지 않습니다.
123
+ - 페이지네이션(연속조회)은 자동 처리 — 에이전트가 커서를 관리할 필요가 없습니다.
124
+ - 자세한 패턴은 [Wiki: AI 에이전트 가이드](https://github.com/gejyn14/kiwoom-cli/wiki/AI-Agents) 참고.
125
+
77
126
  ## 명령어 구조
78
127
 
79
128
  ```
80
- kiwoom [--format table|json|csv] [--no-color]
81
- ├── config 설정 (setup / show / domain)
129
+ kiwoom [--format table|json|csv] [--no-color] [-p 프로필]
130
+ ├── config 설정 (setup / show / domain / profiles)
82
131
  ├── auth 인증 (login / logout / status)
83
132
  ├── stock 종목 조회 (info / orderbook / chart / compare ...)
84
133
  ├── account 계좌 조회 (balance / deposit / returns / pnl ...)
85
134
  ├── order 주문 (buy / sell / modify / cancel / credit / gold)
86
135
  ├── market 시장 정보 (rank / sector / theme / etf / elw / gold)
87
136
  ├── stream 실시간 스트리밍 (quote / orderbook / order / vi ...)
137
+ ├── watch 실시간 종목 모니터링 (TUI)
88
138
  ├── dashboard 대시보드 (계좌 + 거래량 상위 한눈에)
89
139
  └── api Raw API 호출
90
140
  ```
@@ -108,6 +158,7 @@ kiwoom stock sync # 전 시장 종목 리스트 다운로
108
158
  kiwoom stock search 삼성 # 캐시에서 종목 검색
109
159
  kiwoom stock search 삼성 --market kospi # 코스피만 필터
110
160
  kiwoom stock watchlist "005930|000660" # 관심종목
161
+ kiwoom stock compare 005930 000660 # 종목 비교 (최대 여러 종목)
111
162
  ```
112
163
 
113
164
  ### 차트
@@ -160,6 +211,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
160
211
  | `search` | 종목 검색 (캐시 기반, 시장/유형 필터) |
161
212
  | `watchlist` | 관심종목 |
162
213
  | `brokers` | 회원사 리스트 |
214
+ | `compare` | 복수 종목 비교 |
163
215
  | `chart *` | 틱/분봉/일봉/주봉/월봉/년봉, 투자자별 차트 |
164
216
  | `investor *` | 기관매매, 투자자별매매, 프로그램매매 등 10개 |
165
217
  | `analysis *` | 거래상세, 거래량갱신, 매물대, PER, VI, 증권사 등 10개 |
@@ -174,7 +226,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
174
226
 
175
227
  ```bash
176
228
  kiwoom account list # 계좌번호
177
- kiwoom account balance # 잔고 + 보유종목 + 손익
229
+ kiwoom account balance # 잔고 + 보유종목 + 손익 (국내+미국 통합)
178
230
  kiwoom account deposit # 예수금
179
231
  kiwoom account asset # 추정자산
180
232
  kiwoom account today # 당일현황
@@ -216,6 +268,9 @@ kiwoom account orderable amount 005930 --side buy --price 70000
216
268
  | `orderable` | `amount` | 주문가능 금액 |
217
269
  | `orderable` | `margin-qty` | 증거금율별 수량 |
218
270
  | `orderable` | `credit-qty` | 신용보증금율별 수량 |
271
+ | `exchange` | `rate` | 환율 조회 |
272
+ | `exchange` | `estimate` | 환전 예상금액 |
273
+ | `exchange` | `apply` | 환전 신청 |
219
274
  | `history` | `transactions` | 위탁종합 거래내역 |
220
275
  | `history` | `journal` | 당일 매매일지 |
221
276
 
@@ -244,11 +299,13 @@ kiwoom account exchange apply 1000000 --confirm # 원화 → 달러 환전
244
299
  - 정정은 가격만 가능(전량), 취소는 전량 취소만 지원됩니다 (키움 API 제약).
245
300
  - 계좌 조회 명령(`balance/deposit/pnl/orders/history`)은 기본 통합 표시이며 `--market kr|us`로 필터링합니다.
246
301
 
302
+ 자세한 가이드: [Wiki: 미국주식](https://github.com/gejyn14/kiwoom-cli/wiki/US-Stocks)
303
+
247
304
  ---
248
305
 
249
306
  ## order - 주문
250
307
 
251
- 모든 주문에 `--confirm` 필수.
308
+ 주문은 실행 전 미리보기 + 대화형 확인이 기본입니다. 자동화 시에만 `--confirm`으로 스킵하세요.
252
309
 
253
310
  ```bash
254
311
  # 주식
@@ -363,27 +420,13 @@ kiwoom stream types # 타입 코드 목록
363
420
 
364
421
  ---
365
422
 
366
- ## Raw API
367
-
368
- ```bash
369
- kiwoom api ka10001 '{"stk_cd":"005930"}' # 테이블 출력
370
- kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
371
- ```
372
-
373
- ---
374
-
375
- ## dashboard - 대시보드
423
+ ## dashboard / Raw API
376
424
 
377
425
  ```bash
378
426
  kiwoom dashboard # 계좌 요약 + 거래량 상위 한눈에
379
- ```
380
427
 
381
- ## 종목 비교
382
-
383
- ```bash
384
- kiwoom stock compare 005930 000660 # 삼성전자 vs SK하이닉스
385
- kiwoom stock compare 005930 000660 035420 # 3종목 비교
386
- kiwoom -f json stock compare 005930 000660 # JSON 출력
428
+ kiwoom api ka10001 '{"stk_cd":"005930"}' # Raw API — 테이블 출력
429
+ kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
387
430
  ```
388
431
 
389
432
  ---
@@ -429,12 +472,29 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
429
472
  | 2 | API/네트워크 오류 |
430
473
  | 3 | 인증 필요 (토큰 만료) |
431
474
 
475
+ ## 보안
476
+
477
+ 모든 인증정보(appkey, secretkey, 토큰)는 **OS 키체인**(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장됩니다. 파일로 존재하지 않으며, 키체인이 디스크 저장 시 암호화를 담당합니다. `gh`, `aws`, `docker` CLI와 동일한 모델입니다.
478
+
479
+ | 항목 | 저장 방식 | 프롬프트 |
480
+ | ------------------ | ------------------ | :------: |
481
+ | appkey / secretkey | OS 키체인 | X |
482
+ | 토큰 | OS 키체인 | X |
483
+ | config.toml | 도메인, 계좌번호만 | X |
484
+
485
+ - 모든 명령어는 비밀번호/생체인증 프롬프트 없이 동작 (AI 에이전트·자동화 친화적)
486
+ - 앱 자체 암호화 계층은 의도적으로 두지 않음 — 추가 계층은 명령마다 잠금 해제 프롬프트를 요구하게 되어 CLI 사용성을 해침
487
+ - v2.0 이하에서 업그레이드한 경우: 암호화 저장소 형식이 제거되어 `kiwoom config setup`을 한 번 다시 실행해야 합니다
488
+ - 주문은 기본적으로 미리보기 + 대화형 확인을 거칩니다 (`--confirm`으로 스킵)
489
+
490
+ 자세한 내용: [Wiki: 보안 모델](https://github.com/gejyn14/kiwoom-cli/wiki/Security) · [SECURITY.md](SECURITY.md)
491
+
432
492
  ## 참고
433
493
 
434
494
  | 항목 | 값 |
435
495
  | ---------------- | ---------------------------------------- |
436
496
  | 설정 파일 | `~/.kiwoom/config.toml` (도메인, 계좌만) |
437
- | appkey/secretkey | OS 키체인 (암호화 저장) |
497
+ | appkey/secretkey | OS 키체인 |
438
498
  | 토큰 | OS 키체인 |
439
499
  | 캐시 디렉터리 | `~/.kiwoom/cache/` |
440
500
  | 운영 도메인 | `https://api.kiwoom.com` |
@@ -447,21 +507,6 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
447
507
  - 종목코드 6자리: `005930` (삼성전자)
448
508
  - 금현물: `M04020000` (1kg), `M04020100` (미니 100g)
449
509
 
450
- ## 보안
451
-
452
- 인증정보(appkey, secretkey)는 **OS 키체인에 암호화되어 저장**됩니다. 파일로 존재하지 않으며, 비밀번호 없이는 복호화할 수 없습니다.
453
-
454
- | 항목 | 저장 방식 | 비밀번호 필요 |
455
- | ------------------ | ------------------ | :---------------------------------: |
456
- | appkey / secretkey | 암호화 + OS 키체인 | O (`config setup`, `auth login` 시) |
457
- | 토큰 | OS 키체인 (평문) | X (만료되는 값) |
458
- | config.toml | 도메인, 계좌번호만 | X |
459
-
460
- - `config setup` 시 설정한 비밀번호로 appkey/secretkey를 암호화
461
- - `auth login/logout` 시 비밀번호 확인 후 키체인 접근
462
- - 토큰 발급 후 일반 명령어는 비밀번호 없이 사용
463
- - `keyring.get_password()`로 직접 접근해도 암호화된 값만 반환
464
-
465
510
  ## License
466
511
 
467
512
  kiwoom-cli **Source-Available License, Version 1.0** — see [LICENSE](LICENSE).
@@ -1,3 +1,3 @@
1
1
  """Kiwoom Securities REST API CLI."""
2
2
 
3
- __version__ = "2.0.0"
3
+ __version__ = "2.1.1"
@@ -21,7 +21,7 @@ def save_token(token: str, profile: str | None = None) -> None:
21
21
 
22
22
  def load_token(profile: str | None = None) -> str | None:
23
23
  p = config.resolve_profile(profile)
24
- return keyring.get_password(KEYRING_SERVICE, f"{p}:token")
24
+ return config._keyring_get(f"{p}:token")
25
25
 
26
26
 
27
27
  def delete_token(profile: str | None = None) -> None: