kiwoom-cli 2.1.0__tar.gz → 2.2.0__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.
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/PKG-INFO +128 -50
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/README.md +127 -49
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/__init__.py +1 -1
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/auth.py +15 -1
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/order.py +20 -20
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/us/exchange.py +3 -4
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/us/order_ops.py +5 -5
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/config.py +32 -9
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/formatters.py +13 -1
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/main.py +97 -46
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/streaming.py +8 -8
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli.egg-info/PKG-INFO +128 -50
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli.egg-info/SOURCES.txt +1 -0
- kiwoom_cli-2.2.0/tests/test_auth.py +64 -0
- kiwoom_cli-2.2.0/tests/test_auth_cli.py +236 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_cli.py +25 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_credentials.py +29 -0
- kiwoom_cli-2.2.0/tests/test_json_purity.py +82 -0
- kiwoom_cli-2.1.0/tests/test_auth.py +0 -30
- kiwoom_cli-2.1.0/tests/test_auth_cli.py +0 -97
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/LICENSE +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/api_spec.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/client.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/__init__.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/_constants.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/account.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/dashboard.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/market.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/stock.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/stream.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/us/__init__.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/us/_constants.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/us/account_ops.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/us/detect.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/us/stock_ops.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/commands/watch.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli/output.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli.egg-info/dependency_links.txt +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli.egg-info/entry_points.txt +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli.egg-info/requires.txt +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/kiwoom_cli.egg-info/top_level.txt +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/pyproject.toml +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/setup.cfg +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_account.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_client.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_formatters.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_formatters_property.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_market.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_migration.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_order.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_stock.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/tests/test_us.py +0 -0
- {kiwoom_cli-2.1.0 → kiwoom_cli-2.2.0}/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.
|
|
3
|
+
Version: 2.2.0
|
|
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
|
|
@@ -37,30 +37,60 @@ Dynamic: license-file
|
|
|
37
37
|
|
|
38
38
|
# kiwoom-cli
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
**키움증권 REST API 전체를 터미널에서.** 시세 조회부터 주문, 실시간 스트리밍, 미국주식까지 — 명령어 하나로.
|
|
41
41
|
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
## 설치
|
|
42
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
43
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
44
|
+
[](https://github.com/gejyn14/kiwoom-cli/actions/workflows/ci.yml)
|
|
45
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
46
|
+
[](LICENSE)
|
|
49
47
|
|
|
50
48
|
```bash
|
|
51
49
|
pip install kiwoom-cli
|
|
52
50
|
```
|
|
53
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
|
+
|
|
54
81
|
## 시작하기
|
|
55
82
|
|
|
83
|
+
[키움증권 REST API](https://openapi.kiwoom.com)에서 appkey/secretkey를 발급받은 뒤:
|
|
84
|
+
|
|
56
85
|
```bash
|
|
57
|
-
# 1. 초기 설정 (appkey, secretkey
|
|
86
|
+
# 1. 초기 설정 (appkey, secretkey → OS 키체인)
|
|
87
|
+
# 토큰 저장 방식도 여기서 선택: keychain (기본) 또는 env (KIWOOM_TOKEN 직접 관리)
|
|
58
88
|
kiwoom config setup
|
|
59
89
|
|
|
60
90
|
# 2. 토큰 발급
|
|
61
91
|
kiwoom auth login
|
|
62
92
|
|
|
63
|
-
# 3.
|
|
93
|
+
# 3. 끝. 이후 모든 명령은 프롬프트 없이 동작
|
|
64
94
|
kiwoom stock info 005930
|
|
65
95
|
```
|
|
66
96
|
|
|
@@ -79,14 +109,25 @@ kiwoom config show # 현재 설정 확인
|
|
|
79
109
|
|
|
80
110
|
### 환경변수 설정
|
|
81
111
|
|
|
82
|
-
|
|
112
|
+
도메인, 계좌번호, 프로필, 토큰은 환경변수로도 설정 가능합니다.
|
|
83
113
|
|
|
84
114
|
```bash
|
|
85
115
|
export KIWOOM_DOMAIN="prod" # prod 또는 mock
|
|
86
116
|
export KIWOOM_ACCOUNT="1234567" # 선택
|
|
117
|
+
export KIWOOM_PROFILE="isa" # 선택
|
|
118
|
+
export KIWOOM_TOKEN="..." # 선택: 키체인 대신 사용할 접근토큰 (샌드박스/CI용)
|
|
87
119
|
```
|
|
88
120
|
|
|
89
|
-
appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 OS 키체인에 저장하세요.
|
|
121
|
+
appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 OS 키체인에 저장하세요. `KIWOOM_TOKEN`은 만료·폐기 가능한 접근토큰만 담는 통로로, 키체인에 접근할 수 없는 환경(샌드박스, CI, AI 에이전트)에서 사용합니다 — 설정 시 키체인 토큰보다 우선합니다.
|
|
122
|
+
|
|
123
|
+
### 토큰 저장 방식 (keychain vs env)
|
|
124
|
+
|
|
125
|
+
`config setup`에서 토큰 저장 방식을 선택합니다.
|
|
126
|
+
|
|
127
|
+
- **keychain** (기본): `auth login`이 토큰을 OS 키체인에 저장합니다. 본인 터미널에서 쓰는 일반적인 방식.
|
|
128
|
+
- **env**: 토큰을 키체인에 저장하지 않습니다. `auth login`이 토큰과 `export KIWOOM_TOKEN=...` 명령을 출력하면 셸에서 실행하세요. 키체인 접근이 불가능한 환경(샌드박스, CI, 컨테이너)이 주 작업 환경일 때 적합합니다.
|
|
129
|
+
|
|
130
|
+
이후 전환은 `kiwoom config set token_storage keychain|env`.
|
|
90
131
|
|
|
91
132
|
### 멀티 프로필
|
|
92
133
|
|
|
@@ -111,17 +152,58 @@ kiwoom -p isa account balance
|
|
|
111
152
|
kiwoom -p isa auth login
|
|
112
153
|
```
|
|
113
154
|
|
|
155
|
+
## AI 에이전트와 함께 쓰기
|
|
156
|
+
|
|
157
|
+
kiwoom-cli는 AI 에이전트가 도구로 쓰는 것을 처음부터 염두에 두고 설계됐습니다.
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# 구조화된 JSON — 파싱이 필요 없는 출력
|
|
161
|
+
kiwoom -f json stock info 005930
|
|
162
|
+
kiwoom -f json market rank volume | jq '.[].stk_nm'
|
|
163
|
+
|
|
164
|
+
# 일관된 exit code — 0=성공, 1=입력오류, 2=API오류, 3=인증필요
|
|
165
|
+
kiwoom stock price 005930 || echo "재시도 또는 재인증"
|
|
166
|
+
|
|
167
|
+
# 주문은 기본 확인 게이트, 자동화 시에만 --confirm으로 명시적 스킵
|
|
168
|
+
kiwoom order buy 005930 10 --type market --confirm
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
- 어떤 명령도 비밀번호·생체인증을 요구하지 않으므로 에이전트 세션이 중간에 멈추지 않습니다.
|
|
172
|
+
- 페이지네이션(연속조회)은 자동 처리 — 에이전트가 커서를 관리할 필요가 없습니다.
|
|
173
|
+
- 자세한 패턴은 [Wiki: AI 에이전트 가이드](https://github.com/gejyn14/kiwoom-cli/wiki/AI-Agents) 참고.
|
|
174
|
+
|
|
175
|
+
### 샌드박스 환경 (키체인 접근 불가)
|
|
176
|
+
|
|
177
|
+
샌드박스 셸, CI, 컨테이너에서는 OS 키체인을 읽을 수 없습니다. 이때는 본인 터미널에서 토큰을 발급받아 `KIWOOM_TOKEN`으로 전달하세요 — appkey/secretkey는 키체인 밖으로 나가지 않고, 토큰은 만료·폐기 가능합니다.
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# 본인 터미널에서 (하루 1회 정도) — env 모드라면 login이 export 명령을 그대로 출력
|
|
181
|
+
kiwoom config set token_storage env
|
|
182
|
+
kiwoom auth login
|
|
183
|
+
export KIWOOM_TOKEN='...' # login 출력의 export 라인을 복사해 실행
|
|
184
|
+
|
|
185
|
+
# 이 셸에서 에이전트를 실행하면 환경변수가 상속되어 모든 명령이 동작
|
|
186
|
+
kiwoom auth status # 토큰 있음 (환경변수 KIWOOM_TOKEN)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
keychain 모드를 유지하면서 일회성으로 꺼내 쓰려면:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
export KIWOOM_TOKEN=$(security find-generic-password -s kiwoom-cli -a "default:token" -w) # macOS
|
|
193
|
+
```
|
|
194
|
+
|
|
114
195
|
## 명령어 구조
|
|
115
196
|
|
|
116
197
|
```
|
|
117
|
-
kiwoom [--format table|json|csv] [--no-color]
|
|
118
|
-
├── config 설정 (setup / show / domain)
|
|
198
|
+
kiwoom [--format table|json|csv] [--no-color] [-p 프로필]
|
|
199
|
+
├── config 설정 (setup / show / domain / profiles)
|
|
119
200
|
├── auth 인증 (login / logout / status)
|
|
120
201
|
├── stock 종목 조회 (info / orderbook / chart / compare ...)
|
|
121
202
|
├── account 계좌 조회 (balance / deposit / returns / pnl ...)
|
|
122
203
|
├── order 주문 (buy / sell / modify / cancel / credit / gold)
|
|
123
204
|
├── market 시장 정보 (rank / sector / theme / etf / elw / gold)
|
|
124
205
|
├── stream 실시간 스트리밍 (quote / orderbook / order / vi ...)
|
|
206
|
+
├── watch 실시간 종목 모니터링 (TUI)
|
|
125
207
|
├── dashboard 대시보드 (계좌 + 거래량 상위 한눈에)
|
|
126
208
|
└── api Raw API 호출
|
|
127
209
|
```
|
|
@@ -145,6 +227,7 @@ kiwoom stock sync # 전 시장 종목 리스트 다운로
|
|
|
145
227
|
kiwoom stock search 삼성 # 캐시에서 종목 검색
|
|
146
228
|
kiwoom stock search 삼성 --market kospi # 코스피만 필터
|
|
147
229
|
kiwoom stock watchlist "005930|000660" # 관심종목
|
|
230
|
+
kiwoom stock compare 005930 000660 # 종목 비교 (최대 여러 종목)
|
|
148
231
|
```
|
|
149
232
|
|
|
150
233
|
### 차트
|
|
@@ -197,6 +280,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
|
|
|
197
280
|
| `search` | 종목 검색 (캐시 기반, 시장/유형 필터) |
|
|
198
281
|
| `watchlist` | 관심종목 |
|
|
199
282
|
| `brokers` | 회원사 리스트 |
|
|
283
|
+
| `compare` | 복수 종목 비교 |
|
|
200
284
|
| `chart *` | 틱/분봉/일봉/주봉/월봉/년봉, 투자자별 차트 |
|
|
201
285
|
| `investor *` | 기관매매, 투자자별매매, 프로그램매매 등 10개 |
|
|
202
286
|
| `analysis *` | 거래상세, 거래량갱신, 매물대, PER, VI, 증권사 등 10개 |
|
|
@@ -211,7 +295,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
|
|
|
211
295
|
|
|
212
296
|
```bash
|
|
213
297
|
kiwoom account list # 계좌번호
|
|
214
|
-
kiwoom account balance # 잔고 + 보유종목 + 손익
|
|
298
|
+
kiwoom account balance # 잔고 + 보유종목 + 손익 (국내+미국 통합)
|
|
215
299
|
kiwoom account deposit # 예수금
|
|
216
300
|
kiwoom account asset # 추정자산
|
|
217
301
|
kiwoom account today # 당일현황
|
|
@@ -253,6 +337,9 @@ kiwoom account orderable amount 005930 --side buy --price 70000
|
|
|
253
337
|
| `orderable` | `amount` | 주문가능 금액 |
|
|
254
338
|
| `orderable` | `margin-qty` | 증거금율별 수량 |
|
|
255
339
|
| `orderable` | `credit-qty` | 신용보증금율별 수량 |
|
|
340
|
+
| `exchange` | `rate` | 환율 조회 |
|
|
341
|
+
| `exchange` | `estimate` | 환전 예상금액 |
|
|
342
|
+
| `exchange` | `apply` | 환전 신청 |
|
|
256
343
|
| `history` | `transactions` | 위탁종합 거래내역 |
|
|
257
344
|
| `history` | `journal` | 당일 매매일지 |
|
|
258
345
|
|
|
@@ -281,11 +368,13 @@ kiwoom account exchange apply 1000000 --confirm # 원화 → 달러 환전
|
|
|
281
368
|
- 정정은 가격만 가능(전량), 취소는 전량 취소만 지원됩니다 (키움 API 제약).
|
|
282
369
|
- 계좌 조회 명령(`balance/deposit/pnl/orders/history`)은 기본 통합 표시이며 `--market kr|us`로 필터링합니다.
|
|
283
370
|
|
|
371
|
+
자세한 가이드: [Wiki: 미국주식](https://github.com/gejyn14/kiwoom-cli/wiki/US-Stocks)
|
|
372
|
+
|
|
284
373
|
---
|
|
285
374
|
|
|
286
375
|
## order - 주문
|
|
287
376
|
|
|
288
|
-
|
|
377
|
+
주문은 실행 전 미리보기 + 대화형 확인이 기본입니다. 자동화 시에만 `--confirm`으로 스킵하세요.
|
|
289
378
|
|
|
290
379
|
```bash
|
|
291
380
|
# 주식
|
|
@@ -400,27 +489,13 @@ kiwoom stream types # 타입 코드 목록
|
|
|
400
489
|
|
|
401
490
|
---
|
|
402
491
|
|
|
403
|
-
## Raw API
|
|
404
|
-
|
|
405
|
-
```bash
|
|
406
|
-
kiwoom api ka10001 '{"stk_cd":"005930"}' # 테이블 출력
|
|
407
|
-
kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
---
|
|
411
|
-
|
|
412
|
-
## dashboard - 대시보드
|
|
492
|
+
## dashboard / Raw API
|
|
413
493
|
|
|
414
494
|
```bash
|
|
415
495
|
kiwoom dashboard # 계좌 요약 + 거래량 상위 한눈에
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
## 종목 비교
|
|
419
496
|
|
|
420
|
-
|
|
421
|
-
kiwoom
|
|
422
|
-
kiwoom stock compare 005930 000660 035420 # 3종목 비교
|
|
423
|
-
kiwoom -f json stock compare 005930 000660 # JSON 출력
|
|
497
|
+
kiwoom api ka10001 '{"stk_cd":"005930"}' # Raw API — 테이블 출력
|
|
498
|
+
kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
|
|
424
499
|
```
|
|
425
500
|
|
|
426
501
|
---
|
|
@@ -466,13 +541,30 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
|
|
|
466
541
|
| 2 | API/네트워크 오류 |
|
|
467
542
|
| 3 | 인증 필요 (토큰 만료) |
|
|
468
543
|
|
|
544
|
+
## 보안
|
|
545
|
+
|
|
546
|
+
모든 인증정보(appkey, secretkey, 토큰)는 **OS 키체인**(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장됩니다. 파일로 존재하지 않으며, 키체인이 디스크 저장 시 암호화를 담당합니다. `gh`, `aws`, `docker` CLI와 동일한 모델입니다.
|
|
547
|
+
|
|
548
|
+
| 항목 | 저장 방식 | 프롬프트 |
|
|
549
|
+
| ------------------ | ------------------------------------------ | :------: |
|
|
550
|
+
| appkey / secretkey | OS 키체인 | X |
|
|
551
|
+
| 토큰 | OS 키체인 또는 KIWOOM_TOKEN 환경변수 (선택) | X |
|
|
552
|
+
| config.toml | 도메인, 계좌번호, 토큰 저장 방식만 | X |
|
|
553
|
+
|
|
554
|
+
- 모든 명령어는 비밀번호/생체인증 프롬프트 없이 동작 (AI 에이전트·자동화 친화적)
|
|
555
|
+
- 앱 자체 암호화 계층은 의도적으로 두지 않음 — 추가 계층은 명령마다 잠금 해제 프롬프트를 요구하게 되어 CLI 사용성을 해침
|
|
556
|
+
- v2.0 이하에서 업그레이드한 경우: 암호화 저장소 형식이 제거되어 `kiwoom config setup`을 한 번 다시 실행해야 합니다
|
|
557
|
+
- 주문은 기본적으로 미리보기 + 대화형 확인을 거칩니다 (`--confirm`으로 스킵)
|
|
558
|
+
|
|
559
|
+
자세한 내용: [Wiki: 보안 모델](https://github.com/gejyn14/kiwoom-cli/wiki/Security) · [SECURITY.md](SECURITY.md)
|
|
560
|
+
|
|
469
561
|
## 참고
|
|
470
562
|
|
|
471
563
|
| 항목 | 값 |
|
|
472
564
|
| ---------------- | ---------------------------------------- |
|
|
473
|
-
| 설정 파일 | `~/.kiwoom/config.toml` (도메인,
|
|
565
|
+
| 설정 파일 | `~/.kiwoom/config.toml` (도메인, 계좌, 토큰 저장 방식만) |
|
|
474
566
|
| appkey/secretkey | OS 키체인 |
|
|
475
|
-
| 토큰 | OS 키체인
|
|
567
|
+
| 토큰 | OS 키체인 또는 KIWOOM_TOKEN 환경변수 (setup에서 선택) |
|
|
476
568
|
| 캐시 디렉터리 | `~/.kiwoom/cache/` |
|
|
477
569
|
| 운영 도메인 | `https://api.kiwoom.com` |
|
|
478
570
|
| 모의투자 도메인 | `https://mockapi.kiwoom.com` |
|
|
@@ -484,20 +576,6 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
|
|
|
484
576
|
- 종목코드 6자리: `005930` (삼성전자)
|
|
485
577
|
- 금현물: `M04020000` (1kg), `M04020100` (미니 100g)
|
|
486
578
|
|
|
487
|
-
## 보안
|
|
488
|
-
|
|
489
|
-
모든 인증정보(appkey, secretkey, 토큰)는 **OS 키체인**(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장됩니다. 파일로 존재하지 않으며, 키체인이 디스크 저장 시 암호화를 담당합니다. `gh`, `aws`, `docker` CLI와 동일한 모델입니다.
|
|
490
|
-
|
|
491
|
-
| 항목 | 저장 방식 | 프롬프트 |
|
|
492
|
-
| ------------------ | ------------------ | :------: |
|
|
493
|
-
| appkey / secretkey | OS 키체인 | X |
|
|
494
|
-
| 토큰 | OS 키체인 | X |
|
|
495
|
-
| config.toml | 도메인, 계좌번호만 | X |
|
|
496
|
-
|
|
497
|
-
- 모든 명령어는 비밀번호/생체인증 프롬프트 없이 동작 (AI 에이전트·자동화 친화적)
|
|
498
|
-
- 앱 자체 암호화 계층은 의도적으로 두지 않음 — 추가 계층은 명령마다 잠금 해제 프롬프트를 요구하게 되어 CLI 사용성을 해침
|
|
499
|
-
- v2.0 이하에서 업그레이드한 경우: 암호화 저장소 형식이 제거되어 `kiwoom config setup`을 한 번 다시 실행해야 합니다
|
|
500
|
-
|
|
501
579
|
## License
|
|
502
580
|
|
|
503
581
|
kiwoom-cli **Source-Available License, Version 1.0** — see [LICENSE](LICENSE).
|
|
@@ -1,29 +1,59 @@
|
|
|
1
1
|
# kiwoom-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**키움증권 REST API 전체를 터미널에서.** 시세 조회부터 주문, 실시간 스트리밍, 미국주식까지 — 명령어 하나로.
|
|
4
4
|
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
## 설치
|
|
5
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
6
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
7
|
+
[](https://github.com/gejyn14/kiwoom-cli/actions/workflows/ci.yml)
|
|
8
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
9
|
+
[](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 키체인)
|
|
50
|
+
# 토큰 저장 방식도 여기서 선택: keychain (기본) 또는 env (KIWOOM_TOKEN 직접 관리)
|
|
21
51
|
kiwoom config setup
|
|
22
52
|
|
|
23
53
|
# 2. 토큰 발급
|
|
24
54
|
kiwoom auth login
|
|
25
55
|
|
|
26
|
-
# 3.
|
|
56
|
+
# 3. 끝. 이후 모든 명령은 프롬프트 없이 동작
|
|
27
57
|
kiwoom stock info 005930
|
|
28
58
|
```
|
|
29
59
|
|
|
@@ -42,14 +72,25 @@ kiwoom config show # 현재 설정 확인
|
|
|
42
72
|
|
|
43
73
|
### 환경변수 설정
|
|
44
74
|
|
|
45
|
-
|
|
75
|
+
도메인, 계좌번호, 프로필, 토큰은 환경변수로도 설정 가능합니다.
|
|
46
76
|
|
|
47
77
|
```bash
|
|
48
78
|
export KIWOOM_DOMAIN="prod" # prod 또는 mock
|
|
49
79
|
export KIWOOM_ACCOUNT="1234567" # 선택
|
|
80
|
+
export KIWOOM_PROFILE="isa" # 선택
|
|
81
|
+
export KIWOOM_TOKEN="..." # 선택: 키체인 대신 사용할 접근토큰 (샌드박스/CI용)
|
|
50
82
|
```
|
|
51
83
|
|
|
52
|
-
appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 OS 키체인에 저장하세요.
|
|
84
|
+
appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 OS 키체인에 저장하세요. `KIWOOM_TOKEN`은 만료·폐기 가능한 접근토큰만 담는 통로로, 키체인에 접근할 수 없는 환경(샌드박스, CI, AI 에이전트)에서 사용합니다 — 설정 시 키체인 토큰보다 우선합니다.
|
|
85
|
+
|
|
86
|
+
### 토큰 저장 방식 (keychain vs env)
|
|
87
|
+
|
|
88
|
+
`config setup`에서 토큰 저장 방식을 선택합니다.
|
|
89
|
+
|
|
90
|
+
- **keychain** (기본): `auth login`이 토큰을 OS 키체인에 저장합니다. 본인 터미널에서 쓰는 일반적인 방식.
|
|
91
|
+
- **env**: 토큰을 키체인에 저장하지 않습니다. `auth login`이 토큰과 `export KIWOOM_TOKEN=...` 명령을 출력하면 셸에서 실행하세요. 키체인 접근이 불가능한 환경(샌드박스, CI, 컨테이너)이 주 작업 환경일 때 적합합니다.
|
|
92
|
+
|
|
93
|
+
이후 전환은 `kiwoom config set token_storage keychain|env`.
|
|
53
94
|
|
|
54
95
|
### 멀티 프로필
|
|
55
96
|
|
|
@@ -74,17 +115,58 @@ kiwoom -p isa account balance
|
|
|
74
115
|
kiwoom -p isa auth login
|
|
75
116
|
```
|
|
76
117
|
|
|
118
|
+
## AI 에이전트와 함께 쓰기
|
|
119
|
+
|
|
120
|
+
kiwoom-cli는 AI 에이전트가 도구로 쓰는 것을 처음부터 염두에 두고 설계됐습니다.
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# 구조화된 JSON — 파싱이 필요 없는 출력
|
|
124
|
+
kiwoom -f json stock info 005930
|
|
125
|
+
kiwoom -f json market rank volume | jq '.[].stk_nm'
|
|
126
|
+
|
|
127
|
+
# 일관된 exit code — 0=성공, 1=입력오류, 2=API오류, 3=인증필요
|
|
128
|
+
kiwoom stock price 005930 || echo "재시도 또는 재인증"
|
|
129
|
+
|
|
130
|
+
# 주문은 기본 확인 게이트, 자동화 시에만 --confirm으로 명시적 스킵
|
|
131
|
+
kiwoom order buy 005930 10 --type market --confirm
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
- 어떤 명령도 비밀번호·생체인증을 요구하지 않으므로 에이전트 세션이 중간에 멈추지 않습니다.
|
|
135
|
+
- 페이지네이션(연속조회)은 자동 처리 — 에이전트가 커서를 관리할 필요가 없습니다.
|
|
136
|
+
- 자세한 패턴은 [Wiki: AI 에이전트 가이드](https://github.com/gejyn14/kiwoom-cli/wiki/AI-Agents) 참고.
|
|
137
|
+
|
|
138
|
+
### 샌드박스 환경 (키체인 접근 불가)
|
|
139
|
+
|
|
140
|
+
샌드박스 셸, CI, 컨테이너에서는 OS 키체인을 읽을 수 없습니다. 이때는 본인 터미널에서 토큰을 발급받아 `KIWOOM_TOKEN`으로 전달하세요 — appkey/secretkey는 키체인 밖으로 나가지 않고, 토큰은 만료·폐기 가능합니다.
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# 본인 터미널에서 (하루 1회 정도) — env 모드라면 login이 export 명령을 그대로 출력
|
|
144
|
+
kiwoom config set token_storage env
|
|
145
|
+
kiwoom auth login
|
|
146
|
+
export KIWOOM_TOKEN='...' # login 출력의 export 라인을 복사해 실행
|
|
147
|
+
|
|
148
|
+
# 이 셸에서 에이전트를 실행하면 환경변수가 상속되어 모든 명령이 동작
|
|
149
|
+
kiwoom auth status # 토큰 있음 (환경변수 KIWOOM_TOKEN)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
keychain 모드를 유지하면서 일회성으로 꺼내 쓰려면:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
export KIWOOM_TOKEN=$(security find-generic-password -s kiwoom-cli -a "default:token" -w) # macOS
|
|
156
|
+
```
|
|
157
|
+
|
|
77
158
|
## 명령어 구조
|
|
78
159
|
|
|
79
160
|
```
|
|
80
|
-
kiwoom [--format table|json|csv] [--no-color]
|
|
81
|
-
├── config 설정 (setup / show / domain)
|
|
161
|
+
kiwoom [--format table|json|csv] [--no-color] [-p 프로필]
|
|
162
|
+
├── config 설정 (setup / show / domain / profiles)
|
|
82
163
|
├── auth 인증 (login / logout / status)
|
|
83
164
|
├── stock 종목 조회 (info / orderbook / chart / compare ...)
|
|
84
165
|
├── account 계좌 조회 (balance / deposit / returns / pnl ...)
|
|
85
166
|
├── order 주문 (buy / sell / modify / cancel / credit / gold)
|
|
86
167
|
├── market 시장 정보 (rank / sector / theme / etf / elw / gold)
|
|
87
168
|
├── stream 실시간 스트리밍 (quote / orderbook / order / vi ...)
|
|
169
|
+
├── watch 실시간 종목 모니터링 (TUI)
|
|
88
170
|
├── dashboard 대시보드 (계좌 + 거래량 상위 한눈에)
|
|
89
171
|
└── api Raw API 호출
|
|
90
172
|
```
|
|
@@ -108,6 +190,7 @@ kiwoom stock sync # 전 시장 종목 리스트 다운로
|
|
|
108
190
|
kiwoom stock search 삼성 # 캐시에서 종목 검색
|
|
109
191
|
kiwoom stock search 삼성 --market kospi # 코스피만 필터
|
|
110
192
|
kiwoom stock watchlist "005930|000660" # 관심종목
|
|
193
|
+
kiwoom stock compare 005930 000660 # 종목 비교 (최대 여러 종목)
|
|
111
194
|
```
|
|
112
195
|
|
|
113
196
|
### 차트
|
|
@@ -160,6 +243,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
|
|
|
160
243
|
| `search` | 종목 검색 (캐시 기반, 시장/유형 필터) |
|
|
161
244
|
| `watchlist` | 관심종목 |
|
|
162
245
|
| `brokers` | 회원사 리스트 |
|
|
246
|
+
| `compare` | 복수 종목 비교 |
|
|
163
247
|
| `chart *` | 틱/분봉/일봉/주봉/월봉/년봉, 투자자별 차트 |
|
|
164
248
|
| `investor *` | 기관매매, 투자자별매매, 프로그램매매 등 10개 |
|
|
165
249
|
| `analysis *` | 거래상세, 거래량갱신, 매물대, PER, VI, 증권사 등 10개 |
|
|
@@ -174,7 +258,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
|
|
|
174
258
|
|
|
175
259
|
```bash
|
|
176
260
|
kiwoom account list # 계좌번호
|
|
177
|
-
kiwoom account balance # 잔고 + 보유종목 + 손익
|
|
261
|
+
kiwoom account balance # 잔고 + 보유종목 + 손익 (국내+미국 통합)
|
|
178
262
|
kiwoom account deposit # 예수금
|
|
179
263
|
kiwoom account asset # 추정자산
|
|
180
264
|
kiwoom account today # 당일현황
|
|
@@ -216,6 +300,9 @@ kiwoom account orderable amount 005930 --side buy --price 70000
|
|
|
216
300
|
| `orderable` | `amount` | 주문가능 금액 |
|
|
217
301
|
| `orderable` | `margin-qty` | 증거금율별 수량 |
|
|
218
302
|
| `orderable` | `credit-qty` | 신용보증금율별 수량 |
|
|
303
|
+
| `exchange` | `rate` | 환율 조회 |
|
|
304
|
+
| `exchange` | `estimate` | 환전 예상금액 |
|
|
305
|
+
| `exchange` | `apply` | 환전 신청 |
|
|
219
306
|
| `history` | `transactions` | 위탁종합 거래내역 |
|
|
220
307
|
| `history` | `journal` | 당일 매매일지 |
|
|
221
308
|
|
|
@@ -244,11 +331,13 @@ kiwoom account exchange apply 1000000 --confirm # 원화 → 달러 환전
|
|
|
244
331
|
- 정정은 가격만 가능(전량), 취소는 전량 취소만 지원됩니다 (키움 API 제약).
|
|
245
332
|
- 계좌 조회 명령(`balance/deposit/pnl/orders/history`)은 기본 통합 표시이며 `--market kr|us`로 필터링합니다.
|
|
246
333
|
|
|
334
|
+
자세한 가이드: [Wiki: 미국주식](https://github.com/gejyn14/kiwoom-cli/wiki/US-Stocks)
|
|
335
|
+
|
|
247
336
|
---
|
|
248
337
|
|
|
249
338
|
## order - 주문
|
|
250
339
|
|
|
251
|
-
|
|
340
|
+
주문은 실행 전 미리보기 + 대화형 확인이 기본입니다. 자동화 시에만 `--confirm`으로 스킵하세요.
|
|
252
341
|
|
|
253
342
|
```bash
|
|
254
343
|
# 주식
|
|
@@ -363,27 +452,13 @@ kiwoom stream types # 타입 코드 목록
|
|
|
363
452
|
|
|
364
453
|
---
|
|
365
454
|
|
|
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 - 대시보드
|
|
455
|
+
## dashboard / Raw API
|
|
376
456
|
|
|
377
457
|
```bash
|
|
378
458
|
kiwoom dashboard # 계좌 요약 + 거래량 상위 한눈에
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
## 종목 비교
|
|
382
459
|
|
|
383
|
-
|
|
384
|
-
kiwoom
|
|
385
|
-
kiwoom stock compare 005930 000660 035420 # 3종목 비교
|
|
386
|
-
kiwoom -f json stock compare 005930 000660 # JSON 출력
|
|
460
|
+
kiwoom api ka10001 '{"stk_cd":"005930"}' # Raw API — 테이블 출력
|
|
461
|
+
kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
|
|
387
462
|
```
|
|
388
463
|
|
|
389
464
|
---
|
|
@@ -429,13 +504,30 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
|
|
|
429
504
|
| 2 | API/네트워크 오류 |
|
|
430
505
|
| 3 | 인증 필요 (토큰 만료) |
|
|
431
506
|
|
|
507
|
+
## 보안
|
|
508
|
+
|
|
509
|
+
모든 인증정보(appkey, secretkey, 토큰)는 **OS 키체인**(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장됩니다. 파일로 존재하지 않으며, 키체인이 디스크 저장 시 암호화를 담당합니다. `gh`, `aws`, `docker` CLI와 동일한 모델입니다.
|
|
510
|
+
|
|
511
|
+
| 항목 | 저장 방식 | 프롬프트 |
|
|
512
|
+
| ------------------ | ------------------------------------------ | :------: |
|
|
513
|
+
| appkey / secretkey | OS 키체인 | X |
|
|
514
|
+
| 토큰 | OS 키체인 또는 KIWOOM_TOKEN 환경변수 (선택) | X |
|
|
515
|
+
| config.toml | 도메인, 계좌번호, 토큰 저장 방식만 | X |
|
|
516
|
+
|
|
517
|
+
- 모든 명령어는 비밀번호/생체인증 프롬프트 없이 동작 (AI 에이전트·자동화 친화적)
|
|
518
|
+
- 앱 자체 암호화 계층은 의도적으로 두지 않음 — 추가 계층은 명령마다 잠금 해제 프롬프트를 요구하게 되어 CLI 사용성을 해침
|
|
519
|
+
- v2.0 이하에서 업그레이드한 경우: 암호화 저장소 형식이 제거되어 `kiwoom config setup`을 한 번 다시 실행해야 합니다
|
|
520
|
+
- 주문은 기본적으로 미리보기 + 대화형 확인을 거칩니다 (`--confirm`으로 스킵)
|
|
521
|
+
|
|
522
|
+
자세한 내용: [Wiki: 보안 모델](https://github.com/gejyn14/kiwoom-cli/wiki/Security) · [SECURITY.md](SECURITY.md)
|
|
523
|
+
|
|
432
524
|
## 참고
|
|
433
525
|
|
|
434
526
|
| 항목 | 값 |
|
|
435
527
|
| ---------------- | ---------------------------------------- |
|
|
436
|
-
| 설정 파일 | `~/.kiwoom/config.toml` (도메인,
|
|
528
|
+
| 설정 파일 | `~/.kiwoom/config.toml` (도메인, 계좌, 토큰 저장 방식만) |
|
|
437
529
|
| appkey/secretkey | OS 키체인 |
|
|
438
|
-
| 토큰 | OS 키체인
|
|
530
|
+
| 토큰 | OS 키체인 또는 KIWOOM_TOKEN 환경변수 (setup에서 선택) |
|
|
439
531
|
| 캐시 디렉터리 | `~/.kiwoom/cache/` |
|
|
440
532
|
| 운영 도메인 | `https://api.kiwoom.com` |
|
|
441
533
|
| 모의투자 도메인 | `https://mockapi.kiwoom.com` |
|
|
@@ -447,20 +539,6 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
|
|
|
447
539
|
- 종목코드 6자리: `005930` (삼성전자)
|
|
448
540
|
- 금현물: `M04020000` (1kg), `M04020100` (미니 100g)
|
|
449
541
|
|
|
450
|
-
## 보안
|
|
451
|
-
|
|
452
|
-
모든 인증정보(appkey, secretkey, 토큰)는 **OS 키체인**(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장됩니다. 파일로 존재하지 않으며, 키체인이 디스크 저장 시 암호화를 담당합니다. `gh`, `aws`, `docker` CLI와 동일한 모델입니다.
|
|
453
|
-
|
|
454
|
-
| 항목 | 저장 방식 | 프롬프트 |
|
|
455
|
-
| ------------------ | ------------------ | :------: |
|
|
456
|
-
| appkey / secretkey | OS 키체인 | X |
|
|
457
|
-
| 토큰 | OS 키체인 | X |
|
|
458
|
-
| config.toml | 도메인, 계좌번호만 | X |
|
|
459
|
-
|
|
460
|
-
- 모든 명령어는 비밀번호/생체인증 프롬프트 없이 동작 (AI 에이전트·자동화 친화적)
|
|
461
|
-
- 앱 자체 암호화 계층은 의도적으로 두지 않음 — 추가 계층은 명령마다 잠금 해제 프롬프트를 요구하게 되어 CLI 사용성을 해침
|
|
462
|
-
- v2.0 이하에서 업그레이드한 경우: 암호화 저장소 형식이 제거되어 `kiwoom config setup`을 한 번 다시 실행해야 합니다
|
|
463
|
-
|
|
464
542
|
## License
|
|
465
543
|
|
|
466
544
|
kiwoom-cli **Source-Available License, Version 1.0** — see [LICENSE](LICENSE).
|
|
@@ -3,10 +3,19 @@
|
|
|
3
3
|
Tokens are stored in the OS keychain (plain, not encrypted).
|
|
4
4
|
Tokens are short-lived and can be re-issued, so the security risk
|
|
5
5
|
of plain keychain storage is low compared to appkey/secretkey.
|
|
6
|
+
|
|
7
|
+
KIWOOM_TOKEN 환경변수가 설정되어 있으면 키체인보다 우선합니다. 키체인에
|
|
8
|
+
접근할 수 없는 샌드박스/CI/AI 에이전트 환경을 위한 통로로, 만료되는
|
|
9
|
+
토큰만 허용됩니다 — appkey/secretkey는 여전히 환경변수를 지원하지 않습니다.
|
|
10
|
+
|
|
11
|
+
프로필의 token_storage가 "env"이면 save_token은 키체인에 쓰지 않습니다.
|
|
12
|
+
auth login이 토큰을 출력하고, 사용자가 KIWOOM_TOKEN으로 직접 관리합니다.
|
|
6
13
|
"""
|
|
7
14
|
|
|
8
15
|
from __future__ import annotations
|
|
9
16
|
|
|
17
|
+
import os
|
|
18
|
+
|
|
10
19
|
import keyring
|
|
11
20
|
|
|
12
21
|
from . import config
|
|
@@ -16,12 +25,17 @@ KEYRING_SERVICE = config.KEYRING_SERVICE
|
|
|
16
25
|
|
|
17
26
|
def save_token(token: str, profile: str | None = None) -> None:
|
|
18
27
|
p = config.resolve_profile(profile)
|
|
28
|
+
if config.get_token_storage(p) == "env":
|
|
29
|
+
return
|
|
19
30
|
keyring.set_password(KEYRING_SERVICE, f"{p}:token", token)
|
|
20
31
|
|
|
21
32
|
|
|
22
33
|
def load_token(profile: str | None = None) -> str | None:
|
|
34
|
+
env = os.environ.get("KIWOOM_TOKEN")
|
|
35
|
+
if env:
|
|
36
|
+
return env
|
|
23
37
|
p = config.resolve_profile(profile)
|
|
24
|
-
return
|
|
38
|
+
return config._keyring_get(f"{p}:token")
|
|
25
39
|
|
|
26
40
|
|
|
27
41
|
def delete_token(profile: str | None = None) -> None:
|