# 2026-03-25

- KIS 자동화 커스텀 로직은 upstream `workspace/KIS_MCP_Server` 안에 두지 않고 `workspace/projects/kis-trader/`로 분리했다. 원본 KIS repo는 upstream 유지용으로 남기고, 실행환경은 계속 `KIS_MCP_Server/.venv`를 재사용한다.
- `workspace/projects/kis-trader/`에는 `collect_holdings_prices.py`, `alert_watcher.py`, `start_price_collector.sh`, `start_alert_watcher.sh`, `monitor_config.json`, `strategy_config.json`, `price_logs/`가 있다.
- kis-trader 자동화는 크론으로 유지된다: collector/watcher는 `@reboot`와 `*/2 * * * *`로 재시작 감시한다.
- 자동 git 백업 체계를 `~/.openclaw` 루트에 구성했다. private remote는 `ssh://git.tindevil.com:30009/Simp/backup_openclaw.git`이고, 30분마다 변경 있을 때만 자동 commit/push 하도록 `scripts/backup_git_push.sh`를 크론에 등록했다.
- git 작성자 정보는 이 repo 로컬 설정으로 `user.name=openclaw`, `user.email=openclaw@local`이다.
- `.openclaw` 백업 정책은 private repo 기준으로 설정/문서/커스텀 코드 중심으로 추적하고, `openclaw.json` 최신본은 포함하지만 `openclaw.json.bak*`는 제외한다. 현재 crontab은 `cron/crontab.backup`으로 함께 백업한다.
- agents 쪽은 `agents/main/agent/models.json` 정도만 git 백업 가치가 높고, `agents/main/sessions/*.jsonl*`, `.lock`, `auth-profiles.json`, sqlite/런타임 캐시류는 git 상시 백업 가치가 낮다고 판단했다.
- `workspace/acpx.json`에 `Playwright MCP`를 추가했다. 실행은 `npx -y @playwright/mcp@latest --headless --isolated --output-dir /home/arin/.openclaw/workspace/tmp/playwright-mcp` 형태다.
- KIS MCP Server는 OpenClaw가 MCP로 붙여서 실제 잔고조회/주문에는 사용 가능했지만, 주문/체결 조회 구현은 미완성 또는 문서와 불일치한다고 판단했다. 특히 `inquery-daily-ccld`는 총합만 오고 개별 `output1`이 비었고, `inquery-order-detail` 경로/파라미터 쪽 문제 의심이 크다. 사용자는 당장은 더 고치지 않고, 나중에 API 문서 기준으로 별도 프로젝트 재구현하는 방향을 원한다.
- watcher는 프로젝트 경로 이전 후 과거 `alerts.jsonl` backlog를 재전송하는 문제가 있었고, `workspace/projects/kis-trader/price_logs/alert_watcher_state.json`의 offset을 현재 파일 끝으로 맞춰 `skip_existing_backlog` 모드로 재설정해 재발송을 막았다.
- 로컬 llama.cpp 모델 매핑 문제를 수정했다. `openclaw.json`의 모델/agent 설정은 이제 `llamacpp-8080/qwen3-8b-q4km`, `llamacpp-8081/qwen2.5-72b-q4km`, `llamacpp-8082/qwen2.5-coder-32b-q4km`, `llamacpp-8083/deepseek-r1_q4km` 형식의 `provider/model`로 정리되어 있고, 8B 재테스트도 통과했다.
- Playwright MCP는 실제 initialize, tools/list, browser_navigate/evaluate/snapshot까지 검증했고, 네이버 증권 및 SSH Terminal 세션 페이지를 MCP로 열 수 있었다. 헤드리스 해제 후에는 브라우저를 유지하려면 MCP 클라이언트 세션 자체를 살아 있게 둬야 한다는 점을 확인했다.
- `workspace/projects/mcp_sshterminal`는 HTTP MCP 서버(`http://127.0.0.1:5057/mcp`)이고, OpenClaw에는 `npx -y mcp-remote http://127.0.0.1:5057/mcp --allow-http` 브리지 방식으로 등록했다. `list_servers`, `open_session`, `send_input`, `read_output` 등 tool 목록 조회까지 검증했다.
- `workspace/projects/mcp_keyboardmouse`도 HTTP MCP 서버(`http://127.0.0.1:5058/mcp`)로 동작하며, initialize/tools/list 성공을 확인했다. tool 목록은 `press_key`, `list_serial_ports`, `click_mouse`, `type_string`, `move_mouse`, `set_configuration`이다.
- `mcp_sshterminal`와 `mcp_keyboardmouse`는 둘 다 재부팅 후 자동 시작 및 2분 헬스체크 재실행을 위해 start 스크립트와 crontab 항목을 추가했다.
- `workspace/projects/mcp_keyboardmouse`에는 Linux용 `build.sh`, `run.sh`를 만들었고, `run.sh`는 이제 프로젝트 DLL 이름 기준으로 정확한 DLL만 실행하도록 수정됐다.
- KIS MCP 해외 현재가 조회에서 나스닥 시장코드는 실제로 `NAS`가 맞고, 문서/코드에 있던 `NASD`는 잘못된 설명이었다. `server.py`와 README를 수정했고, `NASD` 입력도 내부 alias로 `NAS`로 변환되게 해뒀다. NVDA 해외 현재가 조회는 KIS MCP로 정상 응답을 확인했다.
- 마이그레이션용 문서 `workspace/MIGRATION.md`를 만들었고, 다른 PC에서 압축 파일만 복사했을 때 깨질 수 있는 플러그인/전역 npm 경로/ACPX 확장/Node-dotnet-python-cron 의존성/로컬 모델 포트 차이까지 복구 절차에 포함했다.
- 이제 `workspace/KIS_MCP_Server`는 더 이상 독립 nested git repo로 두지 않고, `~/.openclaw` 백업 git 안에 포함해 같이 관리한다.
