Skill by ara.so — Daily 2026 Skills collection.
A collection of AI agent skills for Koreans. In coding agents such as Claude Code, Codex, and Cursor, you can automate SRT booking, KBO lookup, lottery checking, KakaoTalk sending, Seoul subway arrival information, HWP conversion, postal code search, and more.
Installation
Install all skills (recommended)
# npx로 전체 스킬 설치
npx k-skill install
Or global installation
npm install -g k-skill k-skill install
### 선택 설치
```bash
# SRT만 설치
npx k-skill install srt
# KBO + 로또만 설치
npx k-skill install kbo lotto
Initial setup after installation
# k-skill-setup 스킬 실행 (sops+age 설정, secrets 파일 생성, 런타임 확인)
k-skill-setup
Initial setup order:
k-skill installRunk-skill-setupRun →sops + agekey generation, initialize common secrets file- Securely register secrets values locally (do not paste into chat window)
- Check documentation for each feature
Security and secret management
Absolutely prohibited:
- Entering passwords/API keys directly into chat messages
.envCommitting the file to git- Hardcoding in code
Standard environment variable names:
# SRT
export SRT_USERNAME="your_id"
export SRT_PASSWORD="your_password"
# KTX/Korail
export KORAIL_USERNAME="your_id"
export KORAIL_PASSWORD="your_password"
# 서울 지하철 (공공데이터포털 API 키)
export SEOUL_METRO_API_KEY="your_api_key"
Encrypted storage with sops + age (recommended):
# age 키 생성
age-keygen -o ~/.config/sops/age/keys.txt
# secrets 파일 암호화
sops --age $(cat ~/.config/sops/age/keys.txt | grep "public key" | awk '{print $4}') \
--encrypt secrets.yaml > secrets.enc.yaml
# 복호화하여 환경변수 주입
sops --decrypt secrets.enc.yaml | k-skill env inject
Usage by feature
1. SRT booking
Supports train lookup, reservation, reservation check, and cancellation.
const { SRTClient } = require('k-skill/srt');
const client = new SRTClient({
username: process.env.SRT_USERNAME,
password: process.env.SRT_PASSWORD,
});
// 로그인
await client.login();
// 열차 조회
const trains = await client.searchTrains({
departure: '수서',
arrival: '부산',
date: '20260401', // YYYYMMDD
time: '080000', // HHmmss
passengers: 1,
});
console.log(trains);
// [{ trainNo: 'SRT123', departTime: '08:00', arrivalTime: '10:30', price: 59800, seats: 'available' }, ...]
// 예약
const reservation = await client.reserve({
trainNo: trains[0].trainNo,
passengers: 1,
seatType: 'normal', // 'normal' | 'window' | 'aisle'
});
console.log(reservation.reservationId);
// 예약 확인
const myReservations = await client.getReservations();
console.log(myReservations);
// 예약 취소
await client.cancelReservation(reservation.reservationId);
Example agent prompt:
"4월 1일 수서→부산 SRT 08시 이후 첫 열차 창가석으로 예약해줘"
2. KTX booking
⚠️ Currently not working. Support planned for the future.
const { KTXClient } = require('k-skill/ktx');
// KTX/Korail 열차 조회, 예약, 예약 확인, 취소 지원 목표
// 현재 개발 중 — 사용 불가
3. KakaoTalk Mac CLI
On macOS, kakaocliconversation lookup, search, and message sending using . No authentication required.
const { KakaoTalkMac } = require('k-skill/kakaotalk-mac');
const kakao = new KakaoTalkMac();
// 대화 목록 조회
const conversations = await kakao.listConversations();
console.log(conversations);
// [{ name: '홍길동', lastMessage: '안녕', unread: 2 }, ...]
// 특정 대화 검색
const results = await kakao.searchConversations('개발팀');
// 테스트 전송 (실제 전송 전 확인)
const preview = await kakao.previewSend({
to: '홍길동',
message: '안녕하세요!',
});
console.log(preview); // { to: '홍길동', message: '안녕하세요!', confirmed: false }
// 실제 전송 (사용자 확인 후)
await kakao.send({
to: '홍길동',
message: '안녕하세요!',
confirmed: true, // 반드시 사용자 동의 후 true
});
Important: The agent only sends actually via
confirmed: truewhen the user has explicitly confirmed.
Using the CLI directly:
# 대화 목록
kakaocli list
# 메시지 전송
kakaocli send --to "홍길동" --message "테스트 메시지"
# 대화 내용 조회
kakaocli read --name "홍길동" --count 20
4. Seoul subway arrival information lookup
Public Data Portal API key required.
const { SeoulSubway } = require('k-skill/seoul-subway');
const subway = new SeoulSubway({
apiKey: process.env.SEOUL_METRO_API_KEY,
});
// 역 이름으로 실시간 도착정보 조회
const arrivals = await subway.getArrivals('강남');
console.log(arrivals);
/*
[
{
line: '2호선',
station: '강남',
direction: '성수방면',
nextTrain: '1분 후',
followingTrain: '5분 후',
trainNo: '2234'
},
...
]
*/
// 특정 노선 필터링
const line2 = await subway.getArrivals('강남', { line: '2호선' });
// 역 코드로 조회
const byCode = await subway.getArrivalsByCode('0222');
Example agent prompt:
"지금 강남역 2호선 외선순환 다음 열차 언제 와?"
5. KBO game results lookup
No authentication required.
const { KBOClient } = require('k-skill/kbo');
const kbo = new KBOClient();
// 오늘 경기 일정/결과
const today = await kbo.getGames();
console.log(today);
// 특정 날짜
const games = await kbo.getGames({ date: '20260401' }); // YYYYMMDD
// 팀별 필터링
const lgGames = await kbo.getGames({
date: '20260401',
team: 'LG',
});
console.log(lgGames);
/*
[
{
homeTeam: 'LG',
awayTeam: 'KIA',
homeScore: 5,
awayScore: 3,
status: 'final', // 'scheduled' | 'live' | 'final'
stadium: '잠실',
startTime: '18:30'
}
]
*/
// 팀 목록
const teams = kbo.getTeamList();
// ['LG', 'KIA', 'SSG', 'NC', 'KT', '두산', '한화', '롯데', '삼성', '키움']
6. Lottery winning check
No authentication required.
const { LottoClient } = require('k-skill/lotto');
const lotto = new LottoClient();
// 최신 회차 당첨번호
const latest = await lotto.getLatestResult();
console.log(latest);
/*
{
round: 1162,
date: '2026-03-28',
numbers: [3, 14, 22, 31, 40, 43],
bonusNumber: 7,
prizes: {
first: { winners: 12, amount: 2500000000 },
...
}
}
*/
// 특정 회차
const specific = await lotto.getResult(1100);
// 내 번호 대조
const myNumbers = [3, 14, 22, 31, 40, 43];
const check = await lotto.checkNumbers(myNumbers);
console.log(check);
/*
{
round: 1162,
myNumbers: [3, 14, 22, 31, 40, 43],
matched: [3, 14, 22, 31, 40, 43],
bonusMatched: false,
rank: 1, // 1~5등 또는 null
prize: 2500000000
}
*/
7. HWP document processing
.hwp Supports converting files to JSON/Markdown/HTML, image extraction, and batch processing. No authentication required.
const { HWPProcessor } = require('k-skill/hwp');
const hwp = new HWPProcessor();
// HWP → Markdown 변환
const markdown = await hwp.toMarkdown('./document.hwp');
console.log(markdown);
// HWP → JSON 변환
const json = await hwp.toJSON('./document.hwp');
console.log(json.paragraphs);
// HWP → HTML 변환
const html = await hwp.toHTML('./document.hwp');
// 이미지 추출
const images = await hwp.extractImages('./document.hwp', {
outputDir: './extracted-images',
});
console.log(images); // ['./extracted-images/image_001.png', ...]
// 배치 처리 (디렉토리 내 전체 HWP 파일)
const results = await hwp.batchConvert('./hwp-files/', {
format: 'markdown',
outputDir: './converted/',
});
// Windows 직접 제어 (한글과컴퓨터 앱 설치된 경우)
const winHwp = new HWPProcessor({ useWindowsApp: true });
const nativeResult = await winHwp.toMarkdown('./document.hwp');
Using the CLI:
# 단일 파일 변환
k-skill hwp convert document.hwp --format markdown
# 배치 변환
k-skill hwp batch ./hwp-folder/ --format json --output ./output/
# 이미지 추출
k-skill hwp extract-images document.hwp --output ./images/
8. Postal code search
Uses the official Korea Post postal code API. No authentication required.
const { ZipcodeClient } = require('k-skill/zipcode');
const zipcode = new ZipcodeClient();
// 주소 키워드로 검색
const results = await zipcode.search('강남구 테헤란로');
console.log(results);
/*
[
{
zipcode: '06236',
roadAddress: '서울특별시 강남구 테헤란로 152',
jibunAddress: '서울특별시 강남구 역삼동 736',
building: '강남파이낸스센터'
},
...
]
*/
// 정확한 건물명으로 검색
const exact = await zipcode.search('롯데월드타워');
// 우편번호로 역조회
const byZip = await zipcode.getByZipcode('05510');
Common patterns
Error handling
const { SRTClient, SRTError, SRTAuthError } = require('k-skill/srt');
try {
const client = new SRTClient({
username: process.env.SRT_USERNAME,
password: process.env.SRT_PASSWORD,
});
await client.login();
const trains = await client.searchTrains({ ... });
} catch (err) {
if (err instanceof SRTAuthError) {
console.error('로그인 실패. 아이디/비밀번호를 확인하세요.');
} else if (err instanceof SRTError) {
console.error('SRT 오류:', err.message, err.code);
} else {
throw err;
}
}
Environment variable loading pattern
// .env 파일 사용 시
require('dotenv').config();
// sops 복호화 후 환경변수 주입 시
// sops --decrypt secrets.enc.yaml | k-skill env inject 실행 후 자동 주입됨
const { SRTClient } = require('k-skill/srt');
const client = new SRTClient({
username: process.env.SRT_USERNAME, // 환경변수 참조
password: process.env.SRT_PASSWORD,
});
Summary of all CLI commands
# 설치 및 설정
k-skill install # 전체 스킬 설치
k-skill install srt kbo lotto # 선택 설치
k-skill-setup # sops+age 설정, secrets 초기화
k-skill env inject # 환경변수 주입
# SRT
k-skill srt search --from 수서 --to 부산 --date 20260401 --time 080000
k-skill srt reserve --train SRT123 --passengers 1
k-skill srt list # 예약 목록
k-skill srt cancel --id RES456 # 예약 취소
# KBO
k-skill kbo today # 오늘 경기
k-skill kbo games --date 20260401
k-skill kbo games --team LG
# 로또
k-skill lotto latest # 최신 회차
k-skill lotto result --round 1100
k-skill lotto check --numbers 3,14,22,31,40,43
# 지하철
k-skill subway arrivals --station 강남
k-skill subway arrivals --station 강남 --line 2호선
# HWP
k-skill hwp convert doc.hwp --format markdown
k-skill hwp batch ./folder/ --format json
k-skill hwp extract-images doc.hwp
# 우편번호
k-skill zipcode search "강남구 테헤란로"
k-skill zipcode lookup 06236
# 카카오톡 (macOS)
k-skill kakao list
k-skill kakao send --to "홍길동" --message "메시지"
Troubleshooting
SRT_USERNAME Error that the environment variable does not exist
# 환경변수 확인
echo $SRT_USERNAME
# .env 파일에 등록
echo 'SRT_USERNAME=your_id' >> .env
echo 'SRT_PASSWORD=your_password' >> .env
# sops로 암호화 관리 권장
k-skill-setup # 다시 실행하여 secrets 등록
HWP conversion failure
# 의존 패키지 확인
npm install -g hwp.js
# Python 백엔드 사용 시
pip install python-hwp
# Windows에서 한컴 앱 직접 제어 시
k-skill hwp convert doc.hwp --use-native
KakaoTalk CLI (macOS) does not run
# kakaocli 설치 확인
which kakaocli
# 없으면 설치
brew install kakaocli
# 또는
npm install -g kakaocli
Seoul subway API key error
# 공공데이터포털에서 API 키 발급
# https://data.seoul.go.kr → 서울시 지하철 실시간 도착정보
export SEOUL_METRO_API_KEY="발급받은_키"
Node.js version error
node --version # v18 이상 권장
# nvm으로 버전 변경
nvm install 20
nvm use 20
Roadmap
Currently included:
- ✅ SRT booking
- ⚠️ KTX booking (in development, currently not working)
- ✅ KakaoTalk Mac CLI
- ✅ Seoul subway arrival information
- ✅ KBO game results
- ✅ Lottery winning check
- ✅ HWP document processing
- ✅ Postal code search
Next candidates:
- Coupang order lookup
- Danawa price comparison
- Naver Store order check
- Karrot Market listing lookup
- Government24 civil service lookup
- HomeTax tax lookup