Skip to content

black-astro/smart-msg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

45 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

smart-msg

AI ๊ธฐ๋ฐ˜ Git ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž๋™ ์ƒ์„ฑ ๋„๊ตฌ

staged ๋œ git diff ๋ฅผ ๋ถ„์„ํ•˜์—ฌ Conventional Commit ํ˜•์‹์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
Google Gemini, Groq (Llama), OpenAI, Anthropic Claude, Ollama (๋กœ์ปฌ) ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ํ•œ๊ตญ์–ด์™€ ์˜์–ด ์ถœ๋ ฅ์„ ๋ชจ๋‘ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


version license node Groq Gemini Ollama OpenAI Claude



๋ชฉ์ฐจ



์‹œ์ž‘ํ•˜๊ธฐ

๋‹จ ๋‘ ๋‹จ๊ณ„๋กœ ๋ชจ๋“  ์„ค์ •์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

1. ์„ค์น˜

npm install -g smart-msg

Note

Node.js 18 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. nvm ์‚ฌ์šฉ์ž๋ผ๋ฉด nvm use 24 ๊ถŒ์žฅ.

2. ๋กœ๊ทธ์ธ

sm login

๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐจ๋ก€๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„ ํ•ญ๋ชฉ ์„ ํƒ์ง€
1 ์–ธ์–ด (Language) English (๊ธฐ๋ณธ) / ํ•œ๊ตญ์–ด โ€” ์ดํ›„ ๋ชจ๋“  prompt ๊ฐ€ ์„ ํƒ ์–ธ์–ด๋กœ ์ง„ํ–‰
2 AI provider Google Gemini (๋ฌด๋ฃŒ, ๊ธฐ๋ณธ) / Groq / OpenAI / Claude / Ollama (๋กœ์ปฌ)
3 ๋ชจ๋ธ provider ๋ณ„ ๊ถŒ์žฅ ๋ชจ๋ธ ๋ชฉ๋ก
4 ๋ฉ”์‹œ์ง€ ๊ฐ•๋„ simple / middle / hard
5 API ํ‚ค ์ž๋™์œผ๋กœ ์—ด๋ฆฐ ๋ฐœ๊ธ‰ ํŽ˜์ด์ง€์—์„œ ๋ฐœ๊ธ‰ ํ›„ ์ž…๋ ฅ (Ollama ๋Š” ํ‚ค ๋ถˆํ•„์š”)
6 ๊ธ€๋กœ๋ฒŒ hook ์„ค์น˜ ์—ฌ๋ถ€ Yes ๊ถŒ์žฅ (๋ชจ๋“  git ์ €์žฅ์†Œ์—์„œ ์ž๋™)

Note

์ฒซ ๋‹จ๊ณ„์˜ ์–ธ์–ด ์„ ํƒ ํ™”๋ฉด์€ ํ•ญ์ƒ ์˜์–ด๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ•œ๊ตญ์–ด๋ฅผ ์„ ํƒํ•˜์‹œ๋ฉด ์ดํ›„์˜ ๋ชจ๋“  prompt ๊ฐ€ ํ•œ๊ตญ์–ด๋กœ ์ž๋™ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

์„ค์ •์€ ~/.smart-msg/config.json ์— ์ €์žฅ๋˜๋ฉฐ, ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Tip

6 ๋‹จ๊ณ„์˜ ๊ธ€๋กœ๋ฒŒ hook ์„ ์„ค์น˜ํ•˜๋ฉด ๋ณ„๋„์˜ ์ถ”๊ฐ€ ์ž‘์—… ์—†์ด ๋ชจ๋“  git ์ €์žฅ์†Œ์—์„œ ์ž๋™ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋”ฐ๋กœ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.



Provider ์„ ํƒ ๊ฐ€์ด๋“œ

Provider ๋น„์šฉ ํ‚ค ๋ฐœ๊ธ‰ ์ถ”์ฒœ ๋Œ€์ƒ
Groq (Llama) โญ ๋ฌด๋ฃŒ ํ‹ฐ์–ด ์ œ๊ณต Groq Console (์นด๋“œ ๋“ฑ๋ก ๋ถˆํ•„์š”) ๋ฌด๋ฃŒ ์‚ฌ์šฉ ๊ถŒ์žฅ โ€” ์ž์ฒด LPU ์ธํ”„๋ผ๋กœ 503 ๊ฑฐ์˜ ์—†์Œ + ๋งค์šฐ ๋น ๋ฆ„
Google Gemini ๋ฌด๋ฃŒ ํ‹ฐ์–ด ์ œ๊ณต Google AI Studio (์นด๋“œ ๋“ฑ๋ก ๋ถˆํ•„์š”) ๋ฌด๋ฃŒ ํ‹ฐ์–ด ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋ฉด 503 ์ž์ฃผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
Ollama (๋กœ์ปฌ) ๐Ÿ”’ ์™„์ „ ๋ฌด๋ฃŒ (๋กœ์ปฌ) ํ‚ค ๋ถˆํ•„์š” ์ธํ„ฐ๋„ท ๋‹จ์ ˆ / ํšŒ์‚ฌ ๋ณด์•ˆ ํ™˜๊ฒฝ โ€” ์ฝ”๋“œ๊ฐ€ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€์ง€ ์•Š์Œ
OpenAI (GPT) ์‚ฌ์šฉ๋Ÿ‰๋งŒํผ ๊ณผ๊ธˆ (์œ ๋ฃŒ) OpenAI Platform (์นด๋“œ ๋“ฑ๋ก ํ•„์ˆ˜) OpenAI ์ƒํƒœ๊ณ„๋ฅผ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ
Anthropic Claude ์‚ฌ์šฉ๋Ÿ‰๋งŒํผ ๊ณผ๊ธˆ (์œ ๋ฃŒ) Anthropic Console (์นด๋“œ ๋“ฑ๋ก ํ•„์ˆ˜) Claude ์˜ ๋ฉ”์‹œ์ง€ ํ’ˆ์งˆ์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ

Important

ChatGPT Plus / Claude Max ๋“ฑ ๊ตฌ๋… ๊ฒฐ์ œ๋กœ๋Š” API ํ˜ธ์ถœ์ด ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ๋… ์ƒํ’ˆ๊ณผ ๊ฐœ๋ฐœ์ž API ๋Š” ๊ฒฐ์ œ ์‹œ์Šคํ…œ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉฐ, OpenAI / Claude ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ ค๋ฉด ์ฝ˜์†”์—์„œ ๋ณ„๋„๋กœ ์นด๋“œ ๋“ฑ๋ก ๋˜๋Š” ํฌ๋ ˆ๋”ง ์ถฉ์ „์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜์‹œ๋ ค๋ฉด Groq, Google Gemini, ๋˜๋Š” Ollama ๋ฅผ ์„ ํƒํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Note

Gemini ๋ฌด๋ฃŒ ํ‹ฐ์–ด๋Š” ์ธ๊ธฐ ๋งŽ์€ ์‹œ๊ฐ„๋Œ€์— 503 (high demand) ์‘๋‹ต์ด ์ž์ฃผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ ์žฌ์‹œ๋„๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ๊ธด ํ•˜์ง€๋งŒ ๋นˆ๋„๊ฐ€ ๋†’๋‹ค๋ฉด Groq ์œผ๋กœ ์ „ํ™˜์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค (sm login ๋‹ค์‹œ ์‹คํ–‰). ๋˜๋Š” sm config โ†’ fallback ์—์„œ Groq ์„ ํด๋ฐฑ์œผ๋กœ ๋“ฑ๋กํ•ด๋‘์‹œ๋ฉด, Gemini ์‹คํŒจ ์‹œ ์ž๋™์œผ๋กœ Groq ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Ollama ์‚ฌ์šฉ ์‹œ

Ollama ๋Š” ๋กœ์ปฌ์— LLM ์„ ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํšŒ์‚ฌ ๋ณด์•ˆ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

# 1) Ollama ์„ค์น˜ (https://ollama.com)
# 2) ๋ชจ๋ธ ๋ฏธ๋ฆฌ ๋ฐ›๊ธฐ
ollama pull llama3.2

# 3) smart-msg ๋“ฑ๋ก
sm login   # provider ์„ ํƒ์—์„œ 'Ollama' ์„ ํƒ, ๋ชจ๋ธ์€ llama3.2 ์ž…๋ ฅ

๊ธฐ๋ณธ endpoint ๋Š” http://localhost:11434 ์ด๋ฉฐ, ์›๊ฒฉ Ollama ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ ค๋ฉด sm config โ†’ baseUrl ์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์„ค์น˜์™€ ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ์ดํ›„์˜ ์‚ฌ์šฉ์€ ํ‰์†Œ git ์‚ฌ์šฉ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

git add .
git commit

git commit ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด AI ๊ฐ€ staged ๋œ ๋ณ€๊ฒฝ๋ถ„์„ ๋ถ„์„ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ค๋‹ˆ๋‹ค. ์—๋””ํ„ฐ(๋˜๋Š” IDE ์ปค๋ฐ‹ ์ฐฝ)์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒ€ํ† ํ•œ ๋’ค ๊ทธ๋Œ€๋กœ commit ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜์—ฌ commit ํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘ ์˜ˆ์‹œ

$ git add .
$ git commit

# ์—๋””ํ„ฐ(๋˜๋Š” IDE ์ปค๋ฐ‹ ์ฐฝ)์— ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ž๋™ ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค.
feat(auth): add OAuth login flow

๋ช…๋ น์ค„์—์„œ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹ (์„ ํƒ)

IDE ์ปค๋ฐ‹ ์ฐฝ ๋Œ€์‹  ํ„ฐ๋ฏธ๋„์—์„œ ์ฆ‰์‹œ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  commit ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ง„ํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

git add .
sm c
$ sm c

์ƒ์„ฑ๋œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€:
feat(auth): add OAuth login flow

  y: ๊ทธ๋Œ€๋กœ commit
  r: ๋ฉ”์‹œ์ง€ ๋‹ค์‹œ ์ƒ์„ฑ
  e: ์—๋””ํ„ฐ๋กœ ์—ด์–ด ์ˆ˜์ • ํ›„ commit
  n: ์ทจ์†Œ
? ์ด ๋ฉ”์‹œ์ง€๋กœ ์ปค๋ฐ‹์„ ์ง„ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? [Y/r/e/n]
  • y (๋˜๋Š” Enter) โ€” ๊ทธ๋Œ€๋กœ commit
  • r โ€” AI ๊ฐ€ ๋‹ค์‹œ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ (์ตœ๋Œ€ 5ํšŒ)
  • e โ€” $EDITOR (๋˜๋Š” git core.editor) ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์—ด์–ด ์ˆ˜์ • ํ›„ commit
  • n โ€” ์ทจ์†Œ

sm c --dry-run ์„ ์‚ฌ์šฉํ•˜๋ฉด commit ์—†์ด ๋ฉ”์‹œ์ง€๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.



๋ช…๋ น์–ด

๋ช…๋ น ์„ค๋ช…
sm login ์ตœ์ดˆ ์„ค์ • (์–ธ์–ด, provider, ๋ชจ๋ธ, ๊ฐ•๋„, ํ‚ค, ๊ธ€๋กœ๋ฒŒ hook)
sm c (= sm commit) staged diff ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฆ‰์‹œ commit (y/r/e/n ์„ ํƒ)
sm c --dry-run commit ์—†์ด ๋ฉ”์‹œ์ง€๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์ถœ๋ ฅ
sm c --intent "..." ์ด๋ฒˆ ๋ณ€๊ฒฝ์˜ "์™œ" ํ•œ ์ค„์„ ๋ช…์‹œ (1.3.0+)
sm c --skip-risk ์œ„ํ—˜๋„ ํ‰๊ฐ€/confirm ๊ฑด๋„ˆ๋œ€ (1.3.0+)
sm c --skip-revert revert ๊ฐ์ง€ ๊ฑด๋„ˆ๋œ€ (1.3.0+)
sm v (= sm voice) ์Œ์„ฑ ๋…น์Œ โ†’ Whisper ์ „์‚ฌ โ†’ intent โ†’ commit (1.3.0+)
sm v --file <path> ๋ฏธ๋ฆฌ ๋…น์Œํ•œ ์˜ค๋””์˜ค ํŒŒ์ผ๋กœ ์ „์‚ฌ (1.3.0+)
sm pr [--base <ref>] ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ base..HEAD ๋ณ€๊ฒฝ์œผ๋กœ PR ๋ณธ๋ฌธ (Summary + Test plan) ์ƒ์„ฑ
sm amend ๋งˆ์ง€๋ง‰ commit ์˜ ๋ฉ”์‹œ์ง€๋ฅผ AI ๋กœ ์žฌ์ƒ์„ฑํ•˜์—ฌ amend
sm split [--no-ai] ํฐ staged diff ๋ถ„ํ•  ์ œ์•ˆ โ€” ๋กœ์ปฌ ํœด๋ฆฌ์Šคํ‹ฑ + AI ๋‘ ์ œ์•ˆ (1.3.0+ ๋กœ์ปฌ ์ถ”๊ฐ€)
sm style learn / show / clear ์ €์žฅ์†Œ commit ์Šคํƒ€์ผ ํ•™์Šต โ†’ prompt ์ž๋™ ๋ฐ˜์˜ (1.3.0+)
sm config ์–ธ์–ด/๊ฐ•๋„/๋ชจ๋ธ/ํ†ค/gitmoji/autoIssue/fallback/verbose/baseUrl/intent/risk/revert/privacy ๋ณ€๊ฒฝ
sm status ํ˜„์žฌ ์ €์žฅ๋œ ์„ค์ • + ๋ฒ„์ „(ํ˜„์žฌ/์ตœ์‹ ) ๋น„๊ต ์ถœ๋ ฅ
sm update npm registry ์˜ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์ž์ฒด ์—…๋ฐ์ดํŠธ
sm logout ์ €์žฅ๋œ API ํ‚ค ์ œ๊ฑฐ (๋‹ค๋ฅธ ์„ค์ •/hook ์ •๋ณด๋Š” ๋ณด์กด)
sm uninstall ๋ชจ๋“  ์„ค์ • ๋ฐ hook ์ œ๊ฑฐ
sm completion <shell> ์…ธ ์ž๋™์™„์„ฑ ๋“ฑ๋ก ์Šคํฌ๋ฆฝํŠธ ์ถœ๋ ฅ (bash/zsh/powershell/clink)
sm help [command] ๋„์›€๋ง ์ถœ๋ ฅ. ํŠน์ • ๋ช…๋ น์„ ์ธ์ž๋กœ ์ฃผ๋ฉด ๊ทธ ๋ช…๋ น์˜ ์ƒ์„ธ ๋„์›€๋ง (์˜ˆ: sm help commit)

sm pr ํ™œ์šฉ

# ์ž๋™ base ํƒ์ง€ (origin/main โ†’ main โ†’ master โ†’ develop ์ˆœ)
sm pr

# ํŠน์ • base ์ง€์ •
sm pr --base origin/develop

# gh CLI ์™€ ํŒŒ์ดํ”„ ์—ฐ๊ฒฐ๋กœ ๋ฐ”๋กœ PR ์ƒ์„ฑ
sm pr | gh pr create --body-file -

sm amend ํ™œ์šฉ

# ๋งˆ์ง€๋ง‰ commit ๋ฉ”์‹œ์ง€๊ฐ€ ๋งˆ์Œ์— ์•ˆ ๋“ค ๋•Œ (push ์ „)
sm amend
# โ†’ ๋งˆ์ง€๋ง‰ commit ์˜ diff ๋กœ ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ AI ๊ฐ€ ์ƒ์„ฑ
# โ†’ y/r/e/n ์„ ํƒ ํ›„ git commit --amend


1.3.0 ์‹ ๊ทœ ๊ธฐ๋Šฅ

1.3.0 ์€ commit ์›Œํฌํ”Œ๋กœ์šฐ ์ž์ฒด๋ฅผ ํ•œ ๋‹จ๊ณ„ ๋ฐœ์ „์‹œํ‚ค๋Š” 7 ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ธฐ๋ณธ๊ฐ’์—์„œ ๋น„์ฐจ๋‹จ์„ฑ (์•ˆ๋‚ด๋งŒ, ์‚ฌ์šฉ์ž ํ๋ฆ„ ๋Š์ง€ ์•Š์Œ) ์ด๊ณ  ์˜ต์…˜์œผ๋กœ ๋„๊ฑฐ๋‚˜ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. Intent capture โ€” ์ปค๋ฐ‹ ์ „ "์™œ" ํ•œ ์ค„ ์ž…๋ ฅ

diff ๋งŒ ๋ถ„์„ํ•˜๋ฉด "๋ฌด์—‡์„ ๋ฐ”๊ฟจ๋Š”์ง€" ๋Š” ์ž˜ ์žก์ง€๋งŒ "์™œ" ๋Š” ์žกํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. sm c ๊ฐ€ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ ์ง์ „ ํ•œ ์ค„ ์˜๋„๋ฅผ ๋ฐ›์•„ prompt ์˜ ๋ณ„๋„ ๋ธ”๋ก์œผ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

sm c                          # ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ prompt (๋นˆ Enter ๋กœ ์Šคํ‚ต)
sm c --intent "IE ๋กœ๊ทธ์ธ ๋ฃจํ”„ ์ˆ˜์ •"  # ์ธ๋ผ์ธ ๋ช…์‹œ
sm c --no-intent              # prompt ๊ฐ•์ œ ์Šคํ‚ต (always ๋ชจ๋“œ๋„ ์šฐํšŒ)
SM_INTENT="..." sm c          # non-TTY (hook/CI) ํ™˜๊ฒฝ์šฉ

sm config โ†’ captureIntent: ask (๊ธฐ๋ณธ) / always (ํ•„์ˆ˜) / never

2. Risk score + ์‹œ๊ฐ„๋Œ€ ๊ฒŒ์ดํŠธ

staged diff ์˜ ์˜ํ–ฅ๋„๋ฅผ ํœด๋ฆฌ์Šคํ‹ฑ์œผ๋กœ 1~5์  ํ‰๊ฐ€. DB migration, prod env, CI ์„ค์ •, ํฐ diff ๋“ฑ์ด ๊ฐ€์‚ฐ. ๊ธˆ์š”์ผ 18์‹œ+ / ์ฃผ๋ง / ์•ผ๊ฐ„ (22:00~06:00) ์€ ๋ณ„๋„ ์‹œ๊ฐ„๋Œ€ ๊ฒฝ๊ณ .

์œ„ํ—˜๋„ ํ‰๊ฐ€:
  ์ ์ˆ˜    : โ˜…โ˜…โ˜…โ˜…โ˜† (4/5)
  - DB migration
  - CI/CD config
  ์‹œ๊ฐ„๋Œ€  : โš  ์œ„ํ—˜ ์‹œ๊ฐ„๋Œ€ (Friday 18:00+)
๊ณ ์œ„ํ—˜ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ง„ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? [y/N]

sm config โ†’ riskCheck: warn (๊ธฐ๋ณธ โ€” 4์ + AND ์œ„ํ—˜ ์‹œ๊ฐ„๋Œ€๋งŒ confirm) / on (4์ + ํ•ญ์ƒ confirm) / off

3. Auto-revert detector

sm c ๊ฐ€ staged ๋ณ€๊ฒฝ์„ ์ตœ๊ทผ N ๊ฐœ (๊ธฐ๋ณธ 20) commit ์˜ patch ์™€ ๋น„๊ตํ•ด, ์ด commit ์ด ๊ณผ๊ฑฐ commit ์„ (๋ถ€๋ถ„) ๋˜๋Œ๋ฆฌ๋Š”์ง€ ๊ฐ์ง€ํ•˜๊ณ  ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. "fix A ํ–ˆ๋Š”๋ฐ ๋ฉฐ์น  ๋’ค ๋ฌด๊ด€ํ•œ ์ž‘์—…์—์„œ ๊ทธ ๋ผ์ธ์„ ๋˜๋Œ๋ ค A ์žฌ๋ฐœ" ํŒจํ„ด์„ ์žก์Šต๋‹ˆ๋‹ค.

โš  ์ตœ๊ทผ commit ์„ ๋˜๋Œ๋ฆด ๊ฐ€๋Šฅ์„ฑ (2 ๊ฑด):
src/auth.ts: removes line(s) added in abc1234 "auth: persist session token"
    - session.token = token;

sm config โ†’ revertCheck: on (๊ธฐ๋ณธ) / off. revertLookback ์œผ๋กœ ์Šค์บ” ๊นŠ์ด ์กฐ์ •.

4. Repo style learner

sm style learn ์œผ๋กœ ์ €์žฅ์†Œ์˜ commit ๋ฉ”์‹œ์ง€ ์Šคํƒ€์ผ (CC ์ฑ„ํƒ๋ฅ , ์ž์ฃผ ์“ฐ๋Š” type/scope, ๋ณธ๋ฌธ ๊ธธ์ด, bullet ์Šคํƒ€์ผ, ์ถœ๋ ฅ ์–ธ์–ด, ์ด์Šˆ footer ํ˜•์‹ ๋“ฑ) ์„ ํ•™์Šต โ†’ ~/.smart-msg/styles/<repoKey>.json ์ €์žฅ โ†’ ์ดํ›„ sm c ๊ฐ€ prompt ์— ์ž๋™ ์ฃผ์ž….

sm style learn               # ์ตœ๊ทผ 200 ๊ฐœ ๋ถ„์„ (--sample ์œผ๋กœ ์กฐ์ •, 10~2000)
sm style show                # ํ˜„์žฌ ํ”„๋กœํ•„ ์ถœ๋ ฅ
sm style clear               # ํ”„๋กœํ•„ ์ œ๊ฑฐ

generic Conventional Commits ๊ฐ€ ์•„๋‹ˆ๋ผ "๊ทธ ํŒ€์ด ์“ด ๋“ฏํ•œ ํ†ค" ์ด ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“œ๋Š” ์žฅ๊ธฐ lock-in ๊ธฐ๋Šฅ.

5. Semantic split โ€” ๋กœ์ปฌ ํœด๋ฆฌ์Šคํ‹ฑ ๋ถ„๋ฅ˜

sm split ์ด LLM ์—†์ด ํŒŒ์ผ ๊ฒฝ๋กœ/๋‚ด์šฉ์œผ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ฆ‰์‹œ ๋ถ„๋ฅ˜ํ•˜๊ณ  ๊ถŒ์žฅ ๋ถ„ํ•  + git ๋ช…๋ น ์‹œํ€€์Šค๋ฅผ ์ถœ๋ ฅ. AI ํ…์ŠคํŠธ ์ œ์•ˆ๊ณผ ๋ณ‘ํ–‰ ๋…ธ์ถœ.

sm split            # ๋กœ์ปฌ + AI ๋‘˜ ๋‹ค
sm split --no-ai    # ๋กœ์ปฌ๋งŒ (๋„คํŠธ์›Œํฌ/๋น„์šฉ ์ ˆ๊ฐ)

์นดํ…Œ๊ณ ๋ฆฌ: formatting / docs / tests / ci / deps / config / typesOnly / feature. ์ •๋ ฌ: ๋ถ€์ˆ˜์ ์ธ ๊ฒƒ ๋จผ์ €, ํฐ feature ๊ฐ€ ๋งˆ์ง€๋ง‰.

6. Privacy mode โ€” ์˜๋ฏธ ๋ณด์กด PII ํ† ํฐํ™”

๊ธฐ์กด [REDACTED] ๋งˆ์Šคํ‚น ์œ„์— ์˜๋ฏธ ๋ณด์กด ํ† ํฐํ™” ์ถ”๊ฐ€. email/JWT/UUID/IP/CC/phone/auth-URL ๋“ฑ์ด <EMAIL_1>, <UUID_1>, ... ํ˜•ํƒœ๋กœ ์น˜ํ™˜๋˜๋ฉฐ ๊ฐ™์€ ๊ฐ’์€ ๊ฐ™์€ ํ† ํฐ. ๋ชจ๋ธ์ด ์˜๋ฏธ๋ฅผ ์žƒ์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ๊ฐ€๋Šฅ.

sm config โ†’ privacyMode: off / standard (๊ธฐ๋ณธ โ€” ๋ณดํŽธ PII) / strict (+์ผ๋ฐ˜ URL +Bearer)

IPv4 ์˜ฅํ…Ÿ ๊ฒ€์ฆ + ์‹ ์šฉ์นด๋“œ Luhn ๊ฒ€์ฆ์œผ๋กœ false positive ์ฐจ๋‹จ.

7. Voice-driven commit

sm v (alias sm voice) โ€” ffmpeg ๋งˆ์ดํฌ ๋…น์Œ ๋˜๋Š” --file ์ž…๋ ฅ โ†’ Whisper API ์ „์‚ฌ โ†’ ๊ทธ ํ…์ŠคํŠธ๋ฅผ intent ๋กœ ์‚ฌ์šฉํ•ด sm c ํ๋ฆ„ ์ง„์ž…. ํฐ ๋ณ€๊ฒฝ์— ๊ธด ๋ณธ๋ฌธ์ด ํ•„์š”ํ•  ๋•Œ typing ๋น„์šฉ 0.

sm v                         # 10์ดˆ ๋…น์Œ
sm v --seconds 20            # 20์ดˆ ๋…น์Œ
sm v --file pre-recorded.wav # ffmpeg ๋ถˆํ•„์š”
sm v --dry-run               # ๋ฉ”์‹œ์ง€๋งŒ ์ถœ๋ ฅ

OpenAI ํ‚ค ํ•„์š” (๋ฉ”์ธ provider ๊ฐ€ openai ๊ฐ€ ์•„๋‹ˆ์–ด๋„ openaiApiKey ๋งŒ ์žˆ์œผ๋ฉด ๋™์ž‘). 10 ์ดˆ ํด๋ฆฝ ๋น„์šฉ โ‰ˆ $0.0001 USD.



์˜ต์…˜

Provider ๋ณ„ ๊ถŒ์žฅ ๋ชจ๋ธ

Provider ๊ถŒ์žฅ ๋ชจ๋ธ
Gemini gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.0-flash
Groq llama-3.1-8b-instant, llama-3.3-70b-versatile, gemma2-9b-it
OpenAI gpt-4.1-nano, gpt-4o-mini, gpt-4.1-mini
Claude claude-haiku-4-5, claude-3-5-haiku-latest
Ollama llama3.2, qwen2.5-coder, mistral, phi3 (๋˜๋Š” ์ง์ ‘ ์ž…๋ ฅ)

Language

๊ฐ’ ์ถœ๋ ฅ ์–ธ์–ด
ko ํ•œ๊ตญ์–ด (feat, fix ๋“ฑ type ํ‚ค์›Œ๋“œ๋Š” ์˜์–ด ์œ ์ง€)
en ์˜์–ด

Strength

๋ฉ”์‹œ์ง€์˜ ๊ธธ์ด์™€ ์ƒ์„ธ๋„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

simple ย โ€”ย  ํ•œ ์ค„ (Conventional Commit ํ˜•์‹)
feat(auth): add OAuth login flow
middle ย โ€”ย  ์ฒซ ์ค„ + ๋ณธ๋ฌธ 2~5์ค„
feat(auth): add OAuth login flow

- PKCE ๊ธฐ๋ฐ˜ OAuth ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€
- ๋กœ์ปฌ ์ฝœ๋ฐฑ ์„œ๋ฒ„๋ฅผ ์ž„์‹œ๋กœ ์ƒ์„ฑ
- ๋ฐœ๊ธ‰๋œ ํ† ํฐ์„ ~/.smart-msg/config.json ์— ์ €์žฅ
hard ย โ€”ย  ์ฒซ ์ค„ + README ์ˆ˜์ค€ ๋ณธ๋ฌธ
feat(auth): add OAuth login flow

๊ธฐ์กด API ํ‚ค ์ž…๋ ฅ ๋ฐฉ์‹์€ ๋งค๋ฒˆ ๋ฐœ๊ธ‰ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ ๋ณต์‚ฌ ๋ฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ
์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ€๋‹ด์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ OAuth ํ๋ฆ„์„ ๋„์ž…ํ•˜์—ฌ ์ด๋ฅผ ํ•ด์†Œํ•ฉ๋‹ˆ๋‹ค.

- PKCE flow ๋กœ ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ํš๋“
- ๋กœ์ปฌ 8765 ํฌํŠธ์— ์ž„์‹œ ์ฝœ๋ฐฑ ์„œ๋ฒ„ ์šด์˜
- ํ† ํฐ์€ OS keychain ์— ๋ณด๊ด€
- ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ ์ž๋™ ๊ฐฑ์‹ 

์˜ํ–ฅ: ๊ธฐ์กด API ํ‚ค ์‚ฌ์šฉ์ž์˜ ๋™์ž‘์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Tone (ํ•œ๊ตญ์–ด ์ถœ๋ ฅ ์ข…๊ฒฐ ํ†ค)

ํ•œ๊ตญ์–ด ์ถœ๋ ฅ์—๋งŒ ์ ์šฉ๋˜๋Š” ๋ณธ๋ฌธ ์ข…๊ฒฐ ์Šคํƒ€์ผ์ž…๋‹ˆ๋‹ค. ์˜์–ด ์ถœ๋ ฅ์—๋Š” ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ’ ์ถœ๋ ฅ ์˜ˆ์‹œ
report (๊ธฐ๋ณธ) ๋ฉ”๋‰ด ํ•ญ๋ชฉ ์ถ”๊ฐ€, ์—”๋“œํฌ์ธํŠธ ๋ถ„๋ฆฌ, ์Šค๋ ˆ๋“œ ํ’€ ์ œ๊ฑฐ. ํ•„์š” ์‹œ ์ถ”ํ›„ ํ™•์žฅ. (๋ช…์‚ฌํ˜•/์Œ์Šด์ฒด)
polite ~๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค., ~๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค., ~๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. (์ •์ค‘์ฒด)

sm config โ†’ tone ๋ฉ”๋‰ด์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Note

์‹ ๊ทœ ์„ค์น˜ + ๊ธฐ์กด ์„ค์น˜(๋ฏธ์„ค์ •) ๋ชจ๋‘ report ํ†ค์ด ๊ธฐ๋ณธ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. commit ๋ฉ”์‹œ์ง€๋Š” ์งง์€ ๊ธฐ์ˆ  ๋ณด๊ณ ์„œ ํ†ค์ด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค๋Š” ํŒ๋‹จ์ž…๋‹ˆ๋‹ค. ์ •์ค‘์ฒด๋ฅผ ์›ํ•˜์‹œ๋ฉด sm config ์—์„œ polite ๋กœ ์ „ํ™˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Gitmoji (์ด๋ชจ์ง€ prefix)

sm config โ†’ gitmoji ๋ฅผ on ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด commit type ์•ž์— ์ด๋ชจ์ง€๊ฐ€ ์ž๋™์œผ๋กœ ๋ถ™์Šต๋‹ˆ๋‹ค.

โœจ feat(auth): add OAuth login flow
๐Ÿ› fix(parser): handle empty input
โ™ป๏ธ refactor(api): split endpoint by pageType

๋งคํ•‘: feat โ†’ โœจ, fix โ†’ ๐Ÿ›, docs โ†’ ๐Ÿ“, refactor โ†’ โ™ป๏ธ, perf โ†’ โšก๏ธ, test โ†’ โœ…, chore โ†’ ๐Ÿ”ง, build โ†’ ๐Ÿ“ฆ, style โ†’ ๐Ÿ’„

Auto Issue (๋ธŒ๋žœ์น˜๋ช… โ†’ ์ด์Šˆํ‚ค footer ์ž๋™ ์ฒจ๋ถ€)

sm config โ†’ autoIssue ๋ฅผ on ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ช…์—์„œ ์ด์Šˆ ํ‚ค๋ฅผ ์ถ”์ถœํ•˜์—ฌ commit ๋ฉ”์‹œ์ง€ footer ์— Refs: ๋กœ ์ž๋™ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

git checkout -b feature/AUTH-123-oauth-login
git add .
sm c
# โ†’
# feat(auth): add OAuth login flow
#
# - PKCE ๊ธฐ๋ฐ˜ OAuth ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€
# ...
#
# Refs: AUTH-123

์ถ”์ถœ ํŒจํ„ด:

  • JIRA ๋ฅ˜: AUTH-123, PROJ-9999 ๋“ฑ (๋Œ€๋ฌธ์ž prefix + ์ˆซ์ž)
  • GitHub ๋ฅ˜: #123, gh-123, issue-123, issue/123 ๋“ฑ

Fallback Provider

sm config โ†’ fallback ์—์„œ ํด๋ฐฑ provider ๋ฅผ ๋“ฑ๋กํ•˜๋ฉด, ๋ฉ”์ธ provider ๊ฐ€ ์‹คํŒจ (503, timeout ๋“ฑ) ํ–ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ provider ๋กœ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

provider : gemini    โ† ๋ฉ”์ธ
fallback : groq      โ† Gemini 503 ์‹œ ์ž๋™์œผ๋กœ Groq ํ˜ธ์ถœ

๋‘ provider ์˜ ํ‚ค๊ฐ€ ๋ชจ๋‘ sm login ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด์•ผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Verbose / ๋””๋ฒ„๊ทธ

๋ฌธ์ œ ์ง„๋‹จ์ด ํ•„์š”ํ•  ๋•Œ sm config โ†’ verbose ๋ฅผ on ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด prompt ์™€ ์‘๋‹ต์ด stderr ์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ๋„ ํ™œ์„ฑํ™” ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

SM_DEBUG=1 sm c

Diff ๋งˆ์Šคํ‚น (์ž๋™)

.env ๋ฅ˜์˜ secret, AWS/GitHub ํ† ํฐ, PEM private key ๋“ฑ์€ AI ์— ๋ณด๋‚ด๊ธฐ ์ „ ์ž๋™์œผ๋กœ [REDACTED] ๋กœ ๋งˆ์Šคํ‚น๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ˆ˜๋กœ secret ์„ staged ํ•œ ๊ฒฝ์šฐ์˜ 1์ฐจ ๋ฐฉ์–ด์„ ์ž…๋‹ˆ๋‹ค.

Warning

๋งˆ์Šคํ‚น์€ ์™„์ „ํ•œ ๋ณดํ˜ธ ์ˆ˜๋‹จ์ด ์•„๋‹™๋‹ˆ๋‹ค. secret ํŒŒ์ผ์€ .gitignore ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ž…๋‹ˆ๋‹ค.

On-failure (AI ํ˜ธ์ถœ ์‹คํŒจ ์‹œ ๋™์ž‘)

๊ฐ’ ๋™์ž‘
fallback (๊ธฐ๋ณธ) ์•ˆ๋‚ด ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ๋‹ด๊ธด ๋นˆ ํ…œํ”Œ๋ฆฟ์„ ์ ์–ด git ์—๋””ํ„ฐ๊ฐ€ ์—ด๋ฆผ. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ๊ฐ€๋Šฅ
abort ๋ฉ”์‹œ์ง€๋ฅผ ๋น„์›Œ๋‘ฌ git ์ด commit ์ž์ฒด๋ฅผ ์ทจ์†Œ

sm config โ†’ on-failure ๋ฉ”๋‰ด์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ.

Note

Gemini ์˜ 503 (high demand), ์ผ์‹œ ๋„คํŠธ์›Œํฌ ๋‹จ์ ˆ ๋“ฑ์œผ๋กœ AI ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ์ด ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ ์žฌ์‹œ๋„(429/5xx ๋Œ€์ƒ, ๋ฐฑ์˜คํ”„ 0.6์ดˆยท1.2์ดˆ, ๋‹จ์ผ ํ˜ธ์ถœ 30์ดˆ ํƒ€์ž„์•„์›ƒ) + ํด๋ฐฑ provider (๋“ฑ๋ก ์‹œ) ๊ฐ€ 1์ฐจ ๋ฐฉ์–ด์„ ์ด๋ฉฐ, ๊ทธ๋ž˜๋„ ์‹คํŒจํ•œ ๊ฒฝ์šฐ ์œ„ ์˜ต์…˜์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Custom Base URL (Azure OpenAI / ์›๊ฒฉ Ollama ๋“ฑ)

sm config โ†’ baseUrl ์—์„œ OpenAI ํ˜ธํ™˜ endpoint ๋˜๋Š” ์›๊ฒฉ Ollama ์„œ๋ฒ„์˜ URL ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • OpenAI: Azure OpenAI, OpenRouter, ์ž์ฒด ํ˜ธ์ŠคํŒ… vLLM ๋“ฑ์— ์‚ฌ์šฉ (https://your-resource.openai.azure.com/...)
  • Ollama: ์›๊ฒฉ ๋จธ์‹ ์—์„œ ์‹คํ–‰ ์ค‘์ธ Ollama (http://192.168.1.10:11434)

์„ค์ • ๋ณ€๊ฒฝ

sm config

๋ฉ”๋‰ด์—์„œ ๋ณ€๊ฒฝํ•  ํ•ญ๋ชฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. provider ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด sm login ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (๋‹ค๋ฅธ provider ์˜ ํ‚ค๋Š” ๋ณด์กด๋ฉ๋‹ˆ๋‹ค).



์—…๋ฐ์ดํŠธ

sm update

sm update ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ๋ฒ„์ „๊ณผ npm registry ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๋น„๊ตํ•œ ๋’ค, ๋‹ค๋ฅธ ๊ฒฝ์šฐ์— ํ•œํ•ด ์ž๋™์œผ๋กœ npm install -g smart-msg@latest ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๋™์œผ๋กœ ์ง„ํ–‰ํ•˜์‹œ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

npm install -g smart-msg@latest

๋ฒ„์ „ ํ™•์ธ

sm --version       # ํ˜„์žฌ ๋ฒ„์ „๋งŒ ์ถœ๋ ฅ
sm status          # ํ˜„์žฌ ๋ฒ„์ „ + ์ตœ์‹  ๋ฒ„์ „ ๋น„๊ต + ์„ค์ • ์ •๋ณด ํ•จ๊ป˜ ์ถœ๋ ฅ

sm status ์ถœ๋ ฅ ์˜ˆ์‹œ:

provider : gemini
model    : gemini-2.5-flash
language : ko
strength : middle
tone     : report
gitmoji  : off
autoIssue: on
fallback : groq
onFail   : fallback
verbose  : off
config   : C:\Users\you\.smart-msg\config.json
version  : 1.1.54 โ†’ latest 1.2.0  โ‡ฃ  run `sm update` to upgrade

Note

์—…๋ฐ์ดํŠธ ํ›„์—๋„ ๊ธฐ์กด ~/.smart-msg/config.json ์˜ ์„ค์ •๊ณผ API ํ‚ค๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ ์ถ”๊ฐ€๋œ provider (์˜ˆ: Ollama) ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด sm login ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์—ฌ ์ถ”๊ฐ€ ํ‚ค๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ํ‚ค๋Š” ๋ฎ์–ด์“ฐ์—ฌ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.



์ž๋™์™„์„ฑ

sm <TAB> ์ž…๋ ฅ ์‹œ ์„œ๋ธŒ์ปค๋งจ๋“œ(login, logout, commit, pr, amend, split ๋“ฑ) ๊ฐ€ ์ž๋™์œผ๋กœ ์™„์„ฑ๋˜๋„๋ก ์…ธ๋ณ„ ๋“ฑ๋ก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

bash

echo 'eval "$(sm completion bash)"' >> ~/.bashrc
source ~/.bashrc

zsh

echo 'eval "$(sm completion zsh)"' >> ~/.zshrc
source ~/.zshrc

PowerShell

sm completion powershell | Out-String | Invoke-Expression

์˜๊ตฌ ์ ์šฉ์„ ์›ํ•˜์‹œ๋Š” ๊ฒฝ์šฐ ์œ„ ์ค„์„ $PROFILE ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. (notepad $PROFILE)

clink (Windows cmd ์‚ฌ์šฉ์ž)

cmd.exe ์ž์ฒด๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ž๋™์™„์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. clink ๋ฅผ ์„ค์น˜ํ•˜์‹œ๋ฉด cmd ์œ„์—์„œ๋„ ์ž๋™์™„์„ฑ์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sm completion clink > %LOCALAPPDATA%\clink\sm.lua

์ƒˆ cmd ์ฐฝ๋ถ€ํ„ฐ ์ž๋™์™„์„ฑ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Note

์ˆœ์ˆ˜ cmd.exe ๋Š” ์ž๋™์™„์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PowerShell ๋˜๋Š” clink ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.



์ง€์› ํ™˜๊ฒฝ

smart-msg ๋Š” git ๋ช…๋ น์ด ๋™์ž‘ํ•˜๋Š” ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„

Git Bash, PowerShell, Windows CMD, macOS Terminal, iTerm2, Linux Bash / Zsh ๋ชจ๋‘ ๋ณ„๋„ ์„ค์ • ์—†์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Note

PowerShell ์—์„œ sm ์‹คํ–‰์ด ์ฐจ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์ •์ฑ…์„ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค.

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

IDE

IDE ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
IntelliJ IDEA / WebStorm / PyCharm Ctrl + K ๋กœ ์ปค๋ฐ‹ ์ฐฝ์„ ์—ด๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค
VS Code, Cursor Ctrl + Shift + G ๋กœ Source Control ํŒจ๋„์„ ์—ด๊ณ  commit ์‹œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค
๊ทธ ์™ธ IDE ๋‚ด์žฅ ํ„ฐ๋ฏธ๋„์ด ์žˆ๋Š” ๋ชจ๋“  IDE ์—์„œ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค

Tip

IDE ์ปค๋ฐ‹ ์ฐฝ ํ†ตํ•ฉ์€ sm login ์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ ๊ธ€๋กœ๋ฒŒ hook ์„ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ sm login ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„ Node.js ํ”„๋กœ์ ํŠธ

smart-msg ๋Š” ๊ธ€๋กœ๋ฒŒ CLI ์ด๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ์–ธ์–ด์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Java, Python, Go ๋“ฑ ์–ด๋–ค ์–ธ์–ด ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, node_modules ํด๋”๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.



์ œ๊ฑฐ

sm uninstall
npm uninstall -g smart-msg

sm uninstall ์ด ๋‹ค์Œ ํ•ญ๋ชฉ์„ ๋ชจ๋‘ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค์ • ๋””๋ ‰ํ† ๋ฆฌ (~/.smart-msg/)
  • ๊ธ€๋กœ๋ฒŒ git hook ์„ค์ • (์ด์ „ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ๋ณต์›)
  • ํ”„๋กœ์ ํŠธ๋ณ„ ์„ค์น˜๋œ hook (์žˆ๋Š” ๊ฒฝ์šฐ)

์ดํ›„ npm uninstall -g smart-msg ๋กœ ํŒจํ‚ค์ง€ ๋ณธ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์™„์ „ํžˆ ์ •๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Warning

npm ์€ ๊ธ€๋กœ๋ฒŒ ํŒจํ‚ค์ง€ uninstall ์‹œ lifecycle script ์˜ ์‹คํ–‰์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. sm uninstall ์„ ๋จผ์ € ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ~/.smart-msg/ ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ API ํ‚ค๋„ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.



License

ISC


Built with TypeScript ย ยทย  Powered by Google Gemini, Groq, OpenAI, Anthropic Claude & Ollama