ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿค– opencode

์˜คํ”ˆ ์†Œ์Šค AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ

Key Features

โœ… ๋ชจ๋ธ ์ž์œ ๋„:

  • Claude ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ChatGPT, OpenAI, GitHub Copilot, Google Gemini, ๋กœ์ปฌ ๋ชจ๋ธ๊นŒ์ง€ 75๊ฐœ ์ด์ƒ์˜ LLM ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์ง€์›

โœ… LSP(Language Server Protocol) ๊ธฐ๋ณธ ๋‚ด์žฅ:

  • LSP ๋•๋ถ„์— ์—์ด์ „ํŠธ๊ฐ€ IDE ์ˆ˜์ค€์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ดํ•ด
  • ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๋ฉด OpenCode๊ฐ€ ์•Œ์•„์„œ ์ ์ ˆํ•œ Language Server๋ฅผ ์ฐพ์•„ ์‹คํ–‰
  • ํƒ€์ž… ์ •๋ณด, ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜, ์ฐธ์กฐ ๊ด€๊ณ„๊นŒ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…

โœ… ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜:

  • PC์—์„œ OpenCode ์„œ๋ฒ„๋ฅผ ๋Œ๋ฆฌ๊ณ , ๋ชจ๋ฐ”์ผ์—์„œ ์›๊ฒฉ์œผ๋กœ ์กฐ์ž‘ ๊ฐ€๋Šฅ

โœ… ๋ฉ€ํ‹ฐ ์„ธ์…˜๊ณผ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ:

  • ๊ฐ™์€ ํ”„๋กœ์ ํŠธ์—์„œ ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๋ฅผ ๋™์‹œ์— ๋Œ๋ฆด ์ˆ˜ ์žˆ์Œ
  • Build ๋ชจ๋“œ์™€ Plan ๋ชจ๋“œ
    • Build๋Š” ์ „์ฒด ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‹คํ–‰ ์—์ด์ „ํŠธ
    • Plan์€ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋ถ„์„๊ณผ ํƒ์ƒ‰์„ ๋‹ด๋‹น
    • ๋ณต์žกํ•œ ์ž‘์—…์„ ํ•  ๋•Œ Plan ๋ชจ๋“œ์—์„œ ๋จผ์ € ์ „๋žต์„ ์„ธ์šฐ๊ณ , Build ๋ชจ๋“œ๋กœ ๋„˜์–ด๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์œ ์šฉ

โœ… ๊ธฐ๋Šฅ:

  • /share ๋ช…๋ น์œผ๋กœ ๋Œ€ํ™”๋ฅผ ๋งํฌ๋กœ ๋งŒ๋“ค์–ด ๊ณต์œ 
  • ์—์ด์ „ํŠธ๊ฐ€ ๋งŒ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ /undo๋กœ ๋˜๋Œ๋ฆฌ๊ณ , ๋งˆ์Œ์ด ๋ฐ”๋€Œ๋ฉด /redo๋กœ ๋‹ค์‹œ ์ ์šฉ ๊ฐ€๋Šฅ

โœ… ํ”„๋ผ์ด๋ฒ„์‹œ:

  • ์‚ฌ์šฉ์ž ์ฝ”๋“œ๋‚˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ

Install

์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ์„ค์น˜ > ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋Š” OpenCode tap ์‚ฌ์šฉ์„ ๊ถŒ์žฅ

$ curl -fsSL https://opencode.ai/install | bash


...

Installing opencode version: 1.2.10
โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ–  100%
Successfully added opencode to $PATH in /Users/aaron/.zshrc

                                 โ–„
โ–ˆโ–€โ–€โ–ˆ โ–ˆโ–€โ–€โ–ˆ โ–ˆโ–€โ–€โ–ˆ โ–ˆโ–€โ–€โ–„ โ–ˆโ–€โ–€โ–€ โ–ˆโ–€โ–€โ–ˆ โ–ˆโ–€โ–€โ–ˆ โ–ˆโ–€โ–€โ–ˆ
โ–ˆโ–‘โ–‘โ–ˆ โ–ˆโ–‘โ–‘โ–ˆ โ–ˆโ–€โ–€โ–€ โ–ˆโ–‘โ–‘โ–ˆ โ–ˆโ–‘โ–‘โ–‘ โ–ˆโ–‘โ–‘โ–ˆ โ–ˆโ–‘โ–‘โ–ˆ โ–ˆโ–€โ–€โ–€
โ–€โ–€โ–€โ–€ โ–ˆโ–€โ–€โ–€ โ–€โ–€โ–€โ–€ โ–€  โ–€ โ–€โ–€โ–€โ–€ โ–€โ–€โ–€โ–€ โ–€โ–€โ–€โ–€ โ–€โ–€โ–€โ–€


OpenCode includes free models, to start:

cd <project>  # Open directory
opencode      # Run command

For more information visit https://opencode.ai/docs

๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ~/.zshrc ํŒŒ์ผ ์ ์šฉ์„ ํ•ด์ฃผ์–ด์•ผ opencode ์„ค์น˜ ๊ฒฝ๋กœ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

$ source ~/.zshrc

...
export PATH=/Users/{id}/.opencode/bin:$PATH

Config

opencode TUI ๋ชจ๋“œ ์‹คํ–‰

$ opencode

API ํ‚ค๋ฅผ ์„ค์ •ํ•˜๋ฉด ์›ํ•˜๋Š” LLM ์ œ๊ณต์ž๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • TUI์—์„œ /connect ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ๋’ค ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” LLM Provider ์„ ํƒ ๋ฐ API ์ ์šฉ

Init

ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ด์„œ OpenCode ์ดˆ๊ธฐํ™”๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— AGENTS.md ํŒŒ์ผ์„ ์ƒ์„ฑ

  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด OpenCode๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์™€ ์‚ฌ์šฉ ์ค‘์ธ ์ฝ”๋”ฉ ํŒจํ„ด์„ ๋” ์ž˜ ์ดํ•ด
$ cd /path/to/project
$ opencode

์ด์ œ, TUI์—์„œ /init ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ดˆ๊ธฐํ™”

Reference

๐Ÿ› ๏ธ oh-my-opencode

oh-my-opencode(OmO)๋Š” OpenCode์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ, AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋„๊ตฌ

๐Ÿ‘‰๐Ÿป ํ”„๋กฌํ”„ํŠธ๋กœ LLM ์—์ด์ „ํŠธ์—์„œ ์„ค์น˜์‹œํ‚ค๊ธฐ

Install and configure oh-my-opencode by following the instructions here:
https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/refs/heads/master/docs/guide/installation.md

Key Features

๐Ÿค– Discipline Agents

๋ชจ๋ธ์˜ ๊ฐ•์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์—ญํ•  ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ

AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์“ฐ๋‹ค ๋ณด๋ฉด ์ด๋Ÿฐ ๊ฒฝํ—˜์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ฐ„๋‹จํ•œ ์ž‘์—…์ธ๋ฐ ์—์ด์ „ํŠธ๊ฐ€ ์“ธ๋ฐ์—†์ด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋’ค์ง€๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ ๋ณต์žกํ•œ ์ž‘์—…์ธ๋ฐ ๊ณ„ํš ์—†์ด ๋ค๋ฒผ๋“ค๊ฑฐ๋‚˜. ๋ฌธ์ œ๋Š” ๋ชจ๋“  ์ž‘์—…์„ ํ•˜๋‚˜์˜ ๋ชจ๋ธ์ด ์ฒ˜๋ฆฌํ•˜๋ ค ํ•œ๋‹ค๋Š” ๋ฐ ์žˆ๋‹ค.

OmO๋Š” ์ž‘์—… ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ์—์ด์ „ํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.

Sisyphus(claude-opus-4-6 / kimi-k2.5 / glm-5)๋Š” ๋ฉ”์ธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ

  • ๊ณ„ํš์„ ์„ธ์šฐ๊ณ , ํ•˜์œ„ ์—์ด์ „ํŠธ์— ์œ„์ž„ํ•˜๊ณ , ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰
  • ์‚ฌ์šฉ์ž๊ฐ€ ultrawork ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋ฉด Sisyphus๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์Šค์Šค๋กœ๋ฅผ ์žฌํ˜ธ์ถœ

Hephaestus(gpt-5.3-codex)๋Š” ์ž์œจ์  ๋”ฅ ์›Œ์ปค

  • "์ด ๋ฒ„๊ทธ ๊ณ ์ณ์ค˜" ๊ฐ™์€ ๋ชฉํ‘œ๋งŒ ๋˜์ ธ์ฃผ๋ฉด ์Šค์Šค๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ , ์—ฐ๊ตฌํ•˜๊ณ , ์‹คํ–‰
  • GPT-5.3-codex์˜ ์ฝ”๋“œ ์ดํ•ด ๋Šฅ๋ ฅ์ด ํŠนํžˆ ๊ฐ•๋ ฅํ•ด์„œ ๋ณต์žกํ•œ ๋ฒ„๊ทธ ์ถ”์ , ๋ฆฌํŒฉํ† ๋ง ๊ฐ™์€ ์ž‘์—…์— ์ ํ•ฉ

Prometheus(claude-opus-4-6 / kimi-k2.5 / glm-5)๋Š” ์ „๋žต ํ”Œ๋ž˜๋„ˆ

  • ๋ณต์žกํ•œ ์ž‘์—…์„ ๋ฐ›์œผ๋ฉด ์ธํ„ฐ๋ทฐ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์งˆ๋ฌธ
  • "์ด ๊ธฐ๋Šฅ ์–ด๋””๊นŒ์ง€ ๊ตฌํ˜„ํ• ๊นŒ์š”?", "๊ธฐ์กด ์ฝ”๋“œ ์ค‘ ๊ฑด๋“œ๋ฆฌ์ง€ ๋ง์•„์•ผ ํ•  ๋ถ€๋ถ„ ์žˆ๋‚˜์š”?" ๊ฐ™์€ ์‹
  • ๋ฒ”์œ„๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , ๊ฒ€์ฆ๋œ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ ๋’ค Sisyphus์—๊ฒŒ ๋„˜๊น€

ํ•ต์‹ฌ์€ ์ด ์„ธ ์—์ด์ „ํŠธ๊ฐ€ ๊ฐ์ž์˜ ๋ชจ๋ธ ๊ฐ•์ ์— ๋งž๊ฒŒ ํŠœ๋‹๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ชจ๋ธ์„ ์ˆ˜๋™์œผ๋กœ ์„ ํƒํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ž‘์—… ์นดํ…Œ๊ณ ๋ฆฌ๋งŒ ์ง€์ •ํ•˜๋ฉด(visual-engineering, deep, quick, ultrabrain ๋“ฑ) ํ•˜๋„ค์Šค๊ฐ€ ์ ์ ˆํ•œ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•œ๋‹ค. Claude๋Š” ๋Œ€ํ™”์™€ ๊ณ„ํš์— ๊ฐ•ํ•˜๊ณ , GPT-5.3-codex๋Š” ์ฝ”๋“œ ์ดํ•ด์— ๊ฐ•ํ•˜๊ณ , Kimi๋‚˜ GLM์€ ๊ธด ์ปจํ…์ŠคํŠธ ์ฒ˜๋ฆฌ์— ๊ฐ•ํ•˜๋‹ค. ์ด๊ฑธ ์‹œ์Šคํ…œ์ด ์•Œ์•„์„œ ๋งค์นญํ•œ๋‹ค.

โšก ultrawork

ํ•œ ๋‹จ์–ด๋กœ ๋๊นŒ์ง€ ๊ฐ€๋Š” ๋ฃจํ”„

AI ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—… ์ค‘๊ฐ„์— ๋ฉˆ์ถ”๋Š” ์ด์œ ๋Š” ๋Œ€๋ถ€๋ถ„ ๋‘ ๊ฐ€์ง€

  • ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๊ฐ€ ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜
  • ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํŒ๋‹จํ•˜์ง€ ๋ชปํ•ด์„œ

๊ฒฐ๊ตญ, ์‚ฌ์šฉ์ž๋Š” "๊ณ„์†ํ•ด"๋ฅผ ๋ฐ˜๋ณต ์ž…๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

ultrawork(์ถ•์•ฝ: ulw)๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. ํ•œ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ชจ๋“  ์—์ด์ „ํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋˜๊ณ , ์ž‘์—…์ด 100% ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ Ralph Loop์™€ ulw-loop๊ฐ€ ์ž‘๋™ํ•œ๋‹ค. ์—์ด์ „ํŠธ๊ฐ€ ์Šค์Šค๋กœ๋ฅผ ๊ณ„์† ํ˜ธ์ถœํ•˜๋ฉด์„œ todo ๋ฆฌ์ŠคํŠธ๋ฅผ ์†Œ์ง„ ํ•œ๋‹ค. Todo Enforcer๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์œ ํœด ์ƒํƒœ์— ๋น ์ง€๋ฉด ์‹œ์Šคํ…œ์ด ๊ฐœ์ž…ํ•ด์„œ ๋‹ค์‹œ ์ž‘์—…ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. "์ด๊ฑฐ ๋๋‚ฌ์œผ๋‹ˆ ๋‹ค์Œ ๋ญ ํ•˜์ง€?"๋ผ๊ณ  ๋ฌผ์–ด๋ณด๋Š” ๋Œ€์‹ , ์‹œ์Šคํ…œ์ด "๋‹ค์Œ์€ ์ด๊ฑฐ์•ผ"๋ผ๊ณ  ์•Œ๋ ค์ค€๋‹ค.

Tip. OmO ์ œ์ž‘์ž๋Š” ChatGPT($20) + Kimi($0.99) + GLM($10) ์กฐํ•ฉ์„ ์ถ”์ฒœ
- ์›” 31๋‹ฌ๋Ÿฌ๋กœ ๊ฑฐ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ปค๋ฒ„
- Claude API๋ฅผ ์ง์ ‘ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ์ €๋ ดํ•˜๊ณ , ๋ชจ๋ธ ์กฐํ•ฉ๋„ ๋” ์œ ์—ฐ

๐Ÿšช IntentGate

๋ฆฌํ„ฐ๋Ÿดํ•œ ์˜คํ•ด์„์„ ๋ง‰๋Š” ์˜๋„ ๋ถ„์„

AI ์—์ด์ „ํŠธ๋Š” ์ข…์ข… ์‚ฌ์šฉ์ž์˜ ๋ง์„ ๋„ˆ๋ฌด ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค.

  • "์ด ์ฝ”๋“œ ์‚ดํŽด๋ด"๋ผ๊ณ  ํ•˜๋ฉด ์ •๋ง ์ฝ”๋“œ๋งŒ ์ฝ๊ณ  ๋๋‚ธ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ–ˆ๋˜ ๊ฑด ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ๊ฐœ์„ ์ ์„ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ ๋ง์ด๋‹ค.

IntentGate๋Š” ์‚ฌ์šฉ์ž์˜ ์ง„์งœ ์˜๋„๋ฅผ ๋จผ์ € ๋ถ„์„ํ•œ ๋’ค ๋ถ„๋ฅ˜ํ•˜๊ณ  ํ–‰๋™ํ•œ๋‹ค.

  • "์ด๊ฑฐ ์‚ดํŽด๋ด"๊ฐ€ ๋‹จ์ˆœ ์กฐ์‚ฌ์ธ์ง€, ๊ตฌํ˜„๊นŒ์ง€ ํ•„์š”ํ•œ์ง€, ์•„๋‹ˆ๋ฉด ์„ค๋ช…๋งŒ ์›ํ•˜๋Š” ๊ฑด์ง€ ๋จผ์ € ํŒ๋‹จํ•œ๋‹ค.

์ด๊ฒŒ ์ค‘์š”ํ•œ ์ด์œ ๋Š”, ์ž˜๋ชป๋œ ๋ถ„๋ฅ˜๊ฐ€ ์ „์ฒด ์ž‘์—… ํ๋ฆ„์„ ๋ง์น˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ๊ตฌํ˜„์ด ํ•„์š”ํ•œ๋ฐ ์กฐ์‚ฌ๋งŒ ํ•˜๊ณ  ๋๋‚˜๋ฉด, ์‚ฌ์šฉ์ž๋Š” ๋‹ค์‹œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ์ปจํ…์ŠคํŠธ๋Š” ๋‚ญ๋น„๋˜๊ณ , ์‹œ๊ฐ„๋„ ๋‚ญ๋น„๋œ๋‹ค. IntentGate๋Š” ์ด ์ฒซ ๋‹จ๊ณ„๋ฅผ ํ™•์‹คํžˆ ์žก๋Š”๋‹ค.

๐Ÿ”— Hashline

stale-line ์—๋Ÿฌ๋ฅผ ์ œ๋กœ๋กœ ๋งŒ๋“œ๋Š” ํŽธ์ง‘ ๋„๊ตฌ

AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์˜ ๊ฐ€์žฅ ์น˜๋ช…์ ์ธ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋Š” ํŽธ์ง‘ ๋„๊ตฌ๋‹ค.

  • ๊ธฐ์กด ์—์ด์ „ํŠธ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์ค„ ๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜ ํŽธ์ง‘์„ ์“ด๋‹ค. "12๋ฒˆ์งธ ์ค„์„ ์ด๋ ‡๊ฒŒ ๋ฐ”๊ฟ”"๋ผ๋Š” ์‹.
  • ๋ฌธ์ œ๋Š” ํŒŒ์ผ์ด ๋™์‹œ์— ๋ณ€๊ฒฝ๋˜๋ฉด ์ค„ ๋ฒˆํ˜ธ๊ฐ€ ์–ด๊ธ‹๋‚œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ณผ๋Š” stale-line ์—๋Ÿฌ, ์ฝ”๋“œ ์†์ƒ, ์ž‘์—… ์‹คํŒจ๋‹ค.

Hash-Anchored Edit Tool(Hashline)์€ ์ด ๋ฌธ์ œ๋ฅผ ์ฝ˜ํ…์ธ  ํ•ด์‹œ๋กœ ํ•ด๊ฒฐ ํ•œ๋‹ค. (oh-my-pi์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ๊ตฌํ˜„)

๋™์ž‘ ๋ฐฉ์‹: ์—์ด์ „ํŠธ๊ฐ€ ํŒŒ์ผ์„ ์ฝ์œผ๋ฉด ๊ฐ ์ค„์— ํ•ด์‹œ ํƒœ๊ทธ ๊ฐ€ ๋ถ™๋Š”๋‹ค.

11#VK| function hello() {
12#PM|   console.log("world");
13#QR| }

์—์ด์ „ํŠธ๊ฐ€ ํŽธ์ง‘์„ ์‹œ๋„ํ•  ๋•Œ, ์‹œ์Šคํ…œ์€ ํ•ด์‹œ๋ฅผ ๊ฒ€์ฆ

  • 11๋ฒˆ์งธ ์ค„์˜ ํ•ด์‹œ๊ฐ€ ์—ฌ์ „ํžˆ VK์ธ์ง€ ํ™•์ธ
  • ๋งŒ์•ฝ ๋‹ค๋ฅธ ์—์ด์ „ํŠธ๊ฐ€ ์ด๋ฏธ ๊ทธ ์ค„์„ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด ํ•ด์‹œ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ณ , ํŽธ์ง‘์€ ๊ฑฐ๋ถ€
  • ์—์ด์ „ํŠธ๋Š” ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฝ๊ณ , ์ตœ์‹  ํ•ด์‹œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์žฌ์‹œ๋„

Grok Code Fast 1 ๋ฒค์น˜๋งˆํฌ์—์„œ Hashline ์ ์šฉ ์ „ ์„ฑ๊ณต๋ฅ  6.7% -> ์ ์šฉ ํ›„ 68.3% 10๋ฐฐ ์ด์ƒ ํ–ฅ์ƒ

๐Ÿ› ๏ธ LSP + AST-Grep

IDE ์ˆ˜์ค€ ์ •๋ฐ€๋„

๋Œ€๋ถ€๋ถ„์˜ AI ์—์ด์ „ํŠธ๋Š” ์ฝ”๋“œ๋ฅผ ํ…์ŠคํŠธ๋กœ ์ทจ๊ธ‰

  • "์ด ํ•จ์ˆ˜ ์ด๋ฆ„ ๋ฐ”๊ฟ”"๋ผ๊ณ  ํ•˜๋ฉด ์ •๊ทœ์‹์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์„œ ์น˜ํ™˜
  • ๋ฌธ์ œ๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๊นŒ์ง€ ๋ฐ”๋€๋‹ค๋Š” ๊ฒƒ
  • ์ฃผ์„ ์•ˆ์˜ ํ•จ์ˆ˜ ์ด๋ฆ„๋„ ๋ฐ”๋€๋‹ค. ์žฌ์•™์ด๋‹ค.

OmO๋Š” LSP(Language Server Protocol)๋ฅผ ๋‚ด์žฅ

  • lsp_rename์€ IDE์ฒ˜๋Ÿผ ์‹ฌ๋ณผ์˜ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ์ถ”์ ํ•ด์„œ ์ •ํ™•ํžˆ ๋ฐ”๊พผ๋‹ค.
  • lsp_goto_definition์€ ์ •์˜๋กœ ์ ํ”„ํ•˜๊ณ , lsp_find_references๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ฒ˜๋ฅผ ์ฐพ๊ณ , lsp_diagnostics๋Š” ์—๋Ÿฌ์™€ ๊ฒฝ๊ณ ๋ฅผ ๋ฏธ๋ฆฌ ์ฒดํฌํ•œ๋‹ค.
  • ๋นŒ๋“œ ์ „์— ๋ฌธ์ œ๋ฅผ ์žก๋Š”๋‹ค.

AST-Grep์€ 25๊ฐœ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ํŒจํ„ด ์ธ์‹ ์ฝ”๋“œ ๊ฒ€์ƒ‰/๋ฆฌ๋ผ์ดํŒ… ๋„๊ตฌ

  • "๋ชจ๋“  console.log๋ฅผ logger.info๋กœ ๋ฐ”๊ฟ”"๋ผ๋Š” ์ž‘์—…์„ AST ์ˆ˜์ค€์—์„œ ์ฒ˜๋ฆฌ
  • ๋ฌธ์ž์—ด ์•ˆ์˜ console.log๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์ฃผ์„ ์•ˆ์˜ ๊ฒƒ๋„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋งŒ ์ •ํ™•ํžˆ ๋ฐ”๊พผ๋‹ค.
  • ์ด ๋‘ ๋„๊ตฌ์˜ ์กฐํ•ฉ์€ ์—์ด์ „ํŠธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ๋กœ ์ดํ•ดํ•˜๊ฒŒ ๋งŒ๋“œ๋ฏ€๋กœ ๋ฆฌํŒฉํ† ๋ง์ด ์•ˆ์ „ํ•ด์ง„๋‹ค.

๐Ÿง  Background Agents

์‹ค์ œ ํŒ€์ฒ˜๋Ÿผ ๋ถ„์—…ํ•˜๋Š” ์‹œ์Šคํ…œ

ํ•˜๋‚˜์˜ ์—์ด์ „ํŠธ๊ฐ€ ๋ชจ๋“  ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋А๋ฆฌ๋‹ค.

  • OmO๋Š” 5๊ฐœ ์ด์ƒ์˜ ์ „๋ฌธ ์—์ด์ „ํŠธ๋ฅผ ๋ณ‘๋ ฌ๋กœ ๋™์‹œ ์‹คํ–‰
  • ๋ฉ”์ธ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๋Š” ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์—์ด์ „ํŠธ๋“ค์ด ๊ฐ์ž ์ž‘์—…์„ ์ฒ˜๋ฆฌ
  • ๊ฒฐ๊ณผ๋Š” ์ค€๋น„๋˜๋ฉด ์ˆ˜์ง‘

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์ด๋ผ๋ฉด,

  • ์—์ด์ „ํŠธ A๋Š” API ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰
  • ์—์ด์ „ํŠธ B๋Š” ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„์„
  • ์—์ด์ „ํŠธ C๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
  • ๋ฉ”์ธ ์—์ด์ „ํŠธ๋Š” ์ด ๊ฒฐ๊ณผ๋“ค์„ ์ข…ํ•ฉํ•ด์„œ ๊ตฌํ˜„

ultrawork์™€ ๊ฒฐํ•ฉ๋˜๋ฉด, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์—์ด์ „ํŠธ๋“ค์ด ๋ณ‘๋ ฌ๋กœ ์ž‘์—…ํ•˜๊ณ , ๋ฉ”์ธ ์—์ด์ „ํŠธ๋Š” ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๋ฆฐ๋‹ค.

  • ์‹ค์ œ ๊ฐœ๋ฐœํŒ€์ด ์Šคํ”„๋ฆฐํŠธ๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๋А๋‚Œ

๐Ÿ“š Built-in MCPs

ํ•ญ์ƒ ์ผœ์ ธ ์žˆ๋Š” ์ •๋ณด ํŒŒ์ดํ”„๋ผ์ธ

๋ณดํ†ต AI ์—์ด์ „ํŠธ๊ฐ€ ์ธํ„ฐ๋„ท์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด ๋ณ„๋„ ๋„๊ตฌ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค ๋ณด๋‹ˆ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ๊ท€์ฐฎ์•„์„œ ์•ˆ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด ์—์ด์ „ํŠธ๋Š” ํ•™์Šต ๋ฐ์ดํ„ฐ์—๋งŒ ์˜์กดํ•˜๊ฒŒ ๋˜๊ณ , ์˜ค๋ž˜๋œ ์ •๋ณด๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

OmO๋Š” ์„ธ ๊ฐ€์ง€ MCP(Model Context Protocol) ์„œ๋ฒ„๋ฅผ ๊ธฐ๋ณธ ํƒ‘์žฌ

  • Exa: ์›น ๊ฒ€์ƒ‰. ์ตœ์‹  ์ •๋ณด, ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ, ๊ธฐ์ˆ  ๋ฌธ์„œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์กฐํšŒ
  • Context7: ๊ณต์‹ ๋ฌธ์„œ. Next.js, React, MongoDB ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ตœ์‹  ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐ
  • Grep.app: GitHub ์ฝ”๋“œ ๊ฒ€์ƒ‰. 100๋งŒ ๊ฐœ ์ด์ƒ์˜ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ ์กฐํšŒ

์ด ์„ธ ๊ฐœ๋Š” ์—์ด์ „ํŠธ๊ฐ€ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•ญ์ƒ ์ผœ์ ธ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, "Next.js 15์—์„œ Server Actions ์–ด๋–ป๊ฒŒ ์จ?"๋ผ๊ณ  ๋ฌผ์œผ๋ฉด, ์—์ด์ „ํŠธ๋Š” ์ˆ˜๋™ ์„ค์ • ์—†์ด๋„ Context7์—์„œ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , Grep.app์—์„œ ์‹ค์ œ ์ฝ”๋“œ ์˜ˆ์‹œ๋ฅผ ์ฐพ๊ณ , Exa๋กœ ์ตœ์‹  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ์กฐ

Skill-Embedded MCPs

์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๋ฅผ ์ ˆ์•ฝํ•˜๋Š” ์„ค๊ณ„

MCP ์„œ๋ฒ„๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ์™€ ์Šคํ‚ค๋งˆ๊ฐ€ ํ”„๋กฌํ”„ํŠธ์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๋ฅผ ์žก์•„๋จน๋Š”๋‹ค. 10๊ฐœ MCP ์„œ๋ฒ„๋ฅผ ์ผœ๋‘๋ฉด ์ปจํ…์ŠคํŠธ์˜ ์ ˆ๋ฐ˜์ด ๋„๊ตฌ ์„ค๋ช…์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค.

Skill-Embedded MCP๋Š” ๊ฐ ์Šคํ‚ฌ(์˜ˆ: Playwright, Git Master)์ด ์ž์ฒด MCP ์„œ๋ฒ„๋ฅผ ํƒ‘์žฌํ•˜์—ฌ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋“œ๋˜๊ณ , ์ž‘์—…์ด ๋๋‚˜๋ฉด ํ•ด์ œ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๋Š” ์‹ค์ œ ์ž‘์—…์—๋งŒ ์“ฐ์ธ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™” ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฉด Playwright ์Šคํ‚ฌ์ด ๋กœ๋“œ๋˜๊ณ , Playwright MCP ์„œ๋ฒ„๊ฐ€ ํ™œ์„ฑํ™”๋œ๋‹ค. ์ž‘์—…์ด ๋๋‚˜๋ฉด ์„œ๋ฒ„๋Š” ํ•ด์ œ๋˜๊ณ , ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ๋ผ์ง„๋‹ค. ๋‹ค์Œ ์ž‘์—…์ด Git ๊ด€๋ จ์ด๋ฉด Git Master ์Šคํ‚ฌ์ด ๋กœ๋“œ๋˜๊ณ , Git MCP ์„œ๋ฒ„๊ฐ€ ํ™œ์„ฑํ™”๋œ๋‹ค.

์ด ๋ฐฉ์‹์€ ํ† ํฐ ํšจ์œจ์„ฑ๊ณผ ์—์ด์ „ํŠธ ์„ฑ๋Šฅ์„ ๋™์‹œ์— ๋†’์ธ๋‹ค. ํ•„์š”ํ•œ ๋„๊ตฌ๋งŒ ๋กœ๋“œ๋˜๋‹ˆ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊นจ๋—ํ•˜๊ณ , ์—์ด์ „ํŠธ๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ”Œ Claude Code Compatible

๊ธฐ์กด์— Claude Code์—์„œ ์„ค์ •ํ•ด ๋‘” ํ›…, ์ปค๋งจ๋“œ, ์Šคํ‚ฌ, MCP, ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ชจ๋‘ ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์„ค์ • ํŒŒ์ผ๋„ ๊ทธ๋Œ€๋กœ๋‹ค. OmO๋Š” Claude Code์˜ ํ™•์žฅ์ด์ง€, ๋Œ€์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.

์ด ๋•๋ถ„์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋น„์šฉ์ด ์—†๋‹ค. ์˜ค๋Š˜ OmO๋ฅผ ์„ค์น˜ํ•˜๊ณ  ultrawork ๋ช…๋ น์–ด๋งŒ ์ตํžˆ๋ฉด, ๋‚ด์ผ๋ถ€ํ„ฐ ๋ฐ”๋กœ ์ƒ์‚ฐ์„ฑ์ด ์˜ฌ๋ผ๊ฐ„๋‹ค.

๐Ÿ“‹ Prometheus Planner

"ํ”„๋กฌํ”„ํŠธ ์•ค ํ”„๋ ˆ์ด"๋ฅผ ๋„˜์–ด์„œ

๋ณต์žกํ•œ ์ž‘์—…์„ AI ์—์ด์ „ํŠธ์—๊ฒŒ ๋˜์ง€๋Š” ๊ฑด ๋„๋ฐ•์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ๊ฑธ ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋„, ์—์ด์ „ํŠธ๋Š” ์˜ˆ์ƒ ๋ฐ–์˜ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ„๋‹ค. ๋ฒ”์œ„๋ฅผ ์˜คํ•ดํ•˜๊ฑฐ๋‚˜, ์ œ์•ฝ ์‚ฌํ•ญ์„ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜, ์•„์˜ˆ ๋‹ค๋ฅธ ๊ฑธ ๊ตฌํ˜„ํ•œ๋‹ค.

Prometheus Planner(/start-work)๋Š” ๋ณต์žกํ•œ ์ž‘์—…์„ ๋ฐ›์œผ๋ฉด ์ธํ„ฐ๋ทฐ ๋ชจ๋“œ๋กœ ์ „ํ™˜

  • "์ด ๊ธฐ๋Šฅ ์–ด๋””๊นŒ์ง€ ๊ตฌํ˜„ํ• ๊นŒ์š”?"
  • "๊ธฐ์กด ์ฝ”๋“œ ์ค‘ ๊ฑด๋“œ๋ฆฌ์ง€ ๋ง์•„์•ผ ํ•  ๋ถ€๋ถ„ ์žˆ๋‚˜์š”?"
  • "ํ…Œ์ŠคํŠธ๋Š” ์–ด๋А ์ˆ˜์ค€๊นŒ์ง€ ์ž‘์„ฑํ• ๊นŒ์š”?"

์‚ฌ์šฉ์ž๊ฐ€ ๋‹ต๋ณ€ํ•˜๋ฉด, Prometheus๋Š” ๋ฒ”์œ„๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ƒ์„ธ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. ์ด ๊ณ„ํš์€ ๊ฒ€์ฆ๋˜๊ณ , Sisyphus์—๊ฒŒ ๋„˜์–ด๊ฐ€์„œ ์‹คํ–‰๋œ๋‹ค.
"ํ”„๋กฌํ”„ํŠธ ์•ค ํ”„๋ ˆ์ด" ๋ฐฉ์‹์€ ์ด์ œ ์˜›๋‚  ์–˜๊ธฐ๋‹ค. Prometheus๋Š” ์ž‘์—… ์ „์— ์ •๋ ฌ(alignment)์„ ๋จผ์ € ํ•œ๋‹ค.

๐Ÿ” /init-deep

์—์ด์ „ํŠธ์—๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ž๋™ํ™”

๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ AI ์—์ด์ „ํŠธ๋ฅผ ์“ฐ๋ ค๋ฉด ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. "์ด ํ”„๋กœ์ ํŠธ๋Š” ์ด๋Ÿฐ ๊ตฌ์กฐ๊ณ , ์ด ๋ชจ๋“ˆ์€ ์ด๋Ÿฐ ์—ญํ• ์„ ํ•˜๊ณ ..." ํ•˜์ง€๋งŒ ์ด๊ฑธ ๋งค๋ฒˆ ํ”„๋กฌํ”„ํŠธ์— ๋„ฃ์œผ๋ฉด ํ† ํฐ์ด ๋‚ญ๋น„๋œ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฌธ์„œ๋„ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค.

/init-deep ๋ช…๋ น์€ ํ”„๋กœ์ ํŠธ ์ „์ฒด์— ๊ณ„์ธต์  AGENTS.md๋ฅผ ์ž๋™ ์ƒ์„ฑ

  • ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ํ•˜๋‚˜, 'src'์— ํ•˜๋‚˜, 'src/components'์— ํ•˜๋‚˜ ..
  • ๊ฐ AGENTS.md๋Š” ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์™€ ํ•˜์œ„ ๋ชจ๋“ˆ์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‹ด๋Š”๋‹ค.
  • ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…ํ•  ๋•Œ ๊ด€๋ จ AGENTS.md๋ฅผ ์ž๋™์œผ๋กœ ์ฝ๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 'src/components/Button.tsx'๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด 'src/components/AGENTS.md'๋ฅผ ์ฝ๊ณ , ํ”„๋กœ์ ํŠธ ์ „์ฒด ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๋ฃจํŠธ์˜ 'AGENTS.md'๋ฅผ ์ฝ๋Š”๋‹ค. ์ˆ˜๋™ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š” ์—†๋‹ค.

์ด ์‹œ์Šคํ…œ์€ ํ† ํฐ ํšจ์œจ์„ฑ๊ณผ ์—์ด์ „ํŠธ ์„ฑ๋Šฅ์„ ๋ชจ๋‘ ๋†’์ธ๋‹ค. ํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ๋งŒ ๋กœ๋“œ๋˜๋‹ˆ ์œˆ๋„์šฐ๊ฐ€ ์ ˆ์•ฝ๋˜๊ณ , ์—์ด์ „ํŠธ๋Š” ์ •ํ™•ํ•œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์—…ํ•œ๋‹ค.

๐Ÿ’ฌ Comment Checker

AI slop์„ ๋ง‰๋Š” ๋งˆ์ง€๋ง‰ ๋ฐฉ์–ด์„ 

AI๊ฐ€ ์ƒ์„ฑํ•œ ์ฝ”๋“œ์—๋Š” ํŠน์œ ์˜ ๋ƒ„์ƒˆ๊ฐ€ ์žˆ๋‹ค. ์˜๋ฏธ ์—†๋Š” ์ฃผ์„, ๊ณผ๋„ํ•œ ์„ค๋ช…, ์žฅํ™ฉํ•œ ๋ฌธ์„œํ™”. "์ด ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค" ๊ฐ™์€ ์ฝ”๋ฉ˜ํŠธ๋Š” ์ฝ”๋“œ๋งŒ ๋ด๋„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์ด๋‹ค.

Comment Checker๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ƒ์„ฑํ•œ ์ฃผ์„์„ ๊ฒ€ํ† ํ•˜๊ณ , ์˜๋ฏธ ์—†๋Š” ๊ฒƒ๋“ค์„ ์ œ๊ฑฐํ•œ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์‹œ๋‹ˆ์–ด ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฝํžŒ๋‹ค.

๐Ÿ–ฅ๏ธ Tmux Integration

REPL๊ณผ ๋””๋ฒ„๊ฑฐ๋„ ๋ผ์ด๋ธŒ๋กœ

AI ์—์ด์ „ํŠธ๊ฐ€ ํ„ฐ๋ฏธ๋„์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด ์ œํ•œ์ ์ด๋‹ค. ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , ์ถœ๋ ฅ์„ ๋ฐ›๊ณ , ๋์ด๋‹ค. ์„ธ์…˜์ด ์œ ์ง€๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Python REPL์—์„œ ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜, ๋””๋ฒ„๊ฑฐ๋ฅผ ๋ถ™์—ฌ์„œ ์Šคํ… ์‹คํ–‰์„ ํ•˜๊ฑฐ๋‚˜, TUI ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

OmO๋Š” Tmux๋ฅผ ๋ชจ๋“  ๊ฒƒ์„ ํ†ตํ•ฉ

  • ์—์ด์ „ํŠธ๊ฐ€ Tmux ์„ธ์…˜์„ ์—ด๊ณ , ๊ทธ ์•ˆ์—์„œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ž‘์—…
  • Python REPL์„ ์ผœ์„œ ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ , ๋””๋ฒ„๊ฑฐ๋ฅผ ๋ถ™์—ฌ์„œ ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋ฅผ ๊ฑธ๊ณ , htop์ด๋‚˜ vim ๊ฐ™์€ TUI ์•ฑ์„ ์‹คํ–‰
  • ์„ธ์…˜์€ ์œ ์ง€

์ด๊ฑด ๋‹จ์ˆœํ•œ ํŽธ์˜ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์™„์ „ํžˆ ๋‹ฌ๋ผ์ง„๋‹ค. ์—์ด์ „ํŠธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ๋ฐ”๋กœ REPL์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋””๋ฒ„๊ฑฐ๋กœ ์ถ”์ ํ•œ๋‹ค. ์‚ฌ๋žŒ์ฒ˜๋Ÿผ ์ผํ•œ๋‹ค.

Conclusion

OmO๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ์œผ๋กœ, ์—์ด์ „ํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์ผํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ

oh-my-opencode์˜ ๊ฐ ๊ธฐ๋Šฅ์€ ๋…๋ฆฝ์ ์œผ๋กœ๋„ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ๊ฒฐํ•ฉ๋˜๋ฉด ์‹œ๋„ˆ์ง€๊ฐ€ ์ƒ๊ธด๋‹ค.

Discipline Agents๋Š” ์ž‘์—…์„ ์˜ฌ๋ฐ”๋ฅธ ๋ชจ๋ธ์— ๋ฐฐ์น˜ํ•˜๊ณ , ultrawork๋Š” ๋๊นŒ์ง€ ์ž‘์—…์„ ์™„๋ฃŒ์‹œํ‚ค๊ณ , Background Agents๋Š” ๋ณ‘๋ ฌ๋กœ ๋ถ„์—…ํ•œ๋‹ค.

IntentGate๋Š” ์˜๋„๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ , Hashline์€ ํŽธ์ง‘์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , LSP๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐ๋กœ ์ดํ•ดํ•œ๋‹ค.

Built-in MCPs๋Š” ์ตœ์‹  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ , Skill-Embedded MCPs๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ์ ˆ์•ฝํ•˜๊ณ , /init-deep๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ž๋™ ๋ฌธ์„œํ™”ํ•œ๋‹ค.

Prometheus๋Š” ๊ณ„ํš์„ ์„ธ์šฐ๊ณ , Comment Checker๋Š” AI ๋ƒ„์ƒˆ๋ฅผ ์ง€์šฐ๊ณ , Tmux๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

Example

โœ… ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์— ๋ฆฌํŽ™ํ† ๋ง ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ, ์—์ด์ „ํŠธ๋ณ„ ์ „๋žต ๋ถ„์„ ๋‹ต๋ณ€

1๏ธโƒฃ. Sisyphus (๋ฉ”์ธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ) โ€” ์ „์ฒด ์„ค๊ณ„ & ํŒ๋‹จ

์—ญํ•  ์ „๋žต
์ฝ”๋“œ๋ฒ ์ด์Šค ํ‰๊ฐ€ ๋จผ์ € ESLint, ๋นŒ๋“œ ์ƒํƒœ, ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜์—ฌ "๊ทœ์œจ ์žˆ๋Š”(Disciplined) ์ฝ”๋“œ๋ฒ ์ด์Šค์ธ๊ฐ€?"๋ฅผ ํŒ๋‹จ
๋ฆฌํŒฉํ† ๋ง ๋ฒ”์œ„ ๊ฒฐ์ • ์œ ์ €์—๊ฒŒ "๋ถ€๋ถ„ ๋ฆฌํŒฉํ† ๋ง vs ์ „๋ฉด ๋ฆฌํŒฉํ† ๋ง" ์„ ํƒ์ง€๋ฅผ ์ œ์‹œํ•˜์—ฌ ์Šค์ฝ”ํ”„ ํ™•์ •
์ž‘์—… ๋ถ„ํ•ด & ์šฐ์„ ์ˆœ์œ„ 10๊ฐœ ์ž‘์—…์„ ์˜์กด์„ฑ ์ˆœ์„œ๋กœ ๋ฐฐ์น˜ โ€” ESLint ์—๋Ÿฌ(blocking) โ†’ ๊ตฌ์กฐ ๋ณ€๊ฒฝ โ†’ ์Šคํƒ€์ผ ํ†ต์ผ(cosmetic)
์ง์ ‘ ์ˆ˜ํ–‰ vs ์œ„์ž„ ํŒ๋‹จ ๋ณต์žกํ•œ ๋กœ์ง ๋ณ€๊ฒฝ(hook ์ถ”์ถœ, ์œ ํ‹ธ ์ƒ์„ฑ, ๋ฐ์ดํ„ฐ ๋งค๋‹ˆ์ € ์ค‘๋ณต์ œ๊ฑฐ)์€ ์ง์ ‘ ์ˆ˜ํ–‰, ๋‹จ์ˆœ ์Šคํƒ€์ผ ํ†ต์ผ์€ ์œ„์ž„
๋„๊ตฌ ์„ ํƒ ast_grep_replace๋กœ JSON.parse(JSON.stringify()) โ†’ structuredClone 7๊ฑด์„ ํ•œ ๋ฒˆ์— ์น˜ํ™˜ (์ˆ˜๋™ ํŽธ์ง‘ ๋Œ€์‹  AST ๊ธฐ๋ฐ˜ ์ž๋™ํ™”)
๊ฒ€์ฆ ๋ฃจํ”„ ๋งค ์ž‘์—… ์™„๋ฃŒ ์‹œ npm run lint ์‹คํ–‰ํ•˜์—ฌ ํšŒ๊ท€ ํ™•์ธ

ํ•ต์‹ฌ ์ „๋žต: "๊ฐ€์žฅ ์˜ํ–ฅ๋„ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ, ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ" โ€” ESLint ์—๋Ÿฌ๋ฅผ ๋จผ์ € ์žก์•„ CI๋ฅผ ๋…น์ƒ‰์œผ๋กœ ๋งŒ๋“  ๋’ค, ๊ตฌ์กฐ์  ๊ฐœ์„ ์„ ์ง„ํ–‰.

.

2๏ธโƒฃ. Explore Agent (ํƒ์ƒ‰ ์—์ด์ „ํŠธ) โ€” ์ฝ”๋“œ๋ฒ ์ด์Šค ํŒจํ„ด ๋ฐœ๊ฒฌ

๋ฆฌํŒฉํ† ๋ง ์ดˆ๊ธฐ์— ๋ณ‘๋ ฌ ํƒ์ƒ‰์œผ๋กœ ์‚ฌ์šฉ๋จ:

  • ์ฃผ๊ฐ„ ๋„ค๋น„๊ฒŒ์ด์…˜ ํŒจํ„ด ํƒ์ƒ‰:
    • 5๊ฐœ ์ปดํฌ๋„ŒํŠธ์—์„œ currentDate, goToPrevWeek, goToNextWeek๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌ โ†’ useWeekNavigation ํ›… ์ถ”์ถœ์˜ ๊ทผ๊ฑฐ
  • ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ์ค‘๋ณต ํƒ์ƒ‰:
    • dataManager.js์—์„œ transformDailyData/transformTeacherDailyData, updateAttendance/updateTeacherAttendance ๋“ฑ์ด ๊ฑฐ์˜ ๋™์ผํ•œ ๋กœ์ง์ธ ๊ฒƒ์„ ๋ฐœ๊ฒฌ โ†’ generic ํ•จ์ˆ˜ ์ถ”์ถœ์˜ ๊ทผ๊ฑฐ
  • ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ ํŒจํ„ด ํƒ์ƒ‰:
    • StudentList.jsx์™€ TeacherList.jsx์—์„œ deep clone โ†’ ensure structure โ†’ apply update ํŒจํ„ด์ด ~20์ค„์”ฉ ๋ฐ˜๋ณต โ†’ applyOptimisticUpdate ์œ ํ‹ธ ์ถ”์ถœ์˜ ๊ทผ๊ฑฐ
  • AdminPanel ๋ž˜ํผ ํ•จ์ˆ˜ ํƒ์ƒ‰:
    • handleDataUpdate = (newData) => setData(newData) ๊ฐ™์€ ๋ถˆํ•„์š”ํ•œ passthrough ๋ž˜ํผ ๋ฐœ๊ฒฌ โ†’ ์ง์ ‘ setData ์ „๋‹ฌ๋กœ ๋‹จ์ˆœํ™”

ํ•ต์‹ฌ ์ „๋žต: "์ค‘๋ณต์„ ์ฐพ์•„๋ผ" โ€” Explore๋Š” grep ์—ญํ• ๋กœ, ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๊ฑธ์นœ ํŒจํ„ด ๋ฐ˜๋ณต์„ ๋น ๋ฅด๊ฒŒ ์‹๋ณ„. Sisyphus๊ฐ€ "์ด๊ฑด ์ถ”์ถœํ•  ๋งŒํ•œ๊ฐ€?"๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต.

.

3๏ธโƒฃ. Sisyphus-Junior (Quick ์นดํ…Œ๊ณ ๋ฆฌ) โ€” ๋‹จ์ˆœ ๋ฐ˜๋ณต ์ž‘์—… ์œ„์ž„

์ด 4๋ฒˆ ์œ„์ž„๋จ (์ด์ „ ์„ธ์…˜ 2ํšŒ + ์ด๋ฒˆ ์„ธ์…˜ ์‹œ๋„ 5ํšŒ โ†’ ์ทจ์†Œ):

์ด์ „ ์„ธ์…˜์—์„œ ์„ฑ๊ณตํ•œ 2๊ฑด:

์œ„์ž„ ๋Œ€์ƒ ์ž‘์—… ๋‚ด์šฉ ์ „๋žต
ClassManagement.jsx React import ์ œ๊ฑฐ, export ์Šคํƒ€์ผ ๋ณ€๊ฒฝ, ์„ธ๋ฏธ์ฝœ๋ก  ์ œ๊ฑฐ "ํŒŒ์ผ ํ•˜๋‚˜, 3๊ฐ€์ง€ ๊ธฐ๊ณ„์  ๋ณ€ํ™˜" โ€” ๋ช…ํ™•ํ•œ 6-section ํ”„๋กฌํ”„ํŠธ๋กœ ์ง€์‹œ
TeacherManagement.jsx ๋™์ผ ์ž‘์—… ์œ„์™€ ๋™์ผํ•œ ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ ์žฌํ™œ์šฉ

ํ”„๋กฌํ”„ํŠธ ์ „๋žต:

  • TASK / EXPECTED OUTCOME / REQUIRED TOOLS / MUST DO / MUST NOT DO / CONTEXT 6๊ฐœ ์„น์…˜์„ ๋น ์ง์—†์ด ๋ช…์‹œํ•˜์—ฌ ์—์ด์ „ํŠธ๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ์ œํ•œ.

์ด๋ฒˆ ์„ธ์…˜์—์„œ ์‹œ๋„ โ†’ ์ทจ์†Œํ•œ 5๊ฑด:
์„ธ๋ฏธ์ฝœ๋ก  ์ œ๊ฑฐ๋ฅผ 5๊ฐœ ํŒŒ์ผ์— ๋ณ‘๋ ฌ ์œ„์ž„ํ–ˆ์œผ๋‚˜, ์—์ด์ „ํŠธ ์‘๋‹ต์ด ๋А๋ ค ์ง์ ‘ sed ํ•œ ์ค„๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ „์› ์ทจ์†Œ.

๊ตํ›ˆ: ์ž‘์—…์ด "์—์ด์ „ํŠธ ๋ถ€ํŒ… ์‹œ๊ฐ„ > ์‹ค์ œ ์ž‘์—… ์‹œ๊ฐ„"์ธ ๊ฒฝ์šฐ, ์œ„์ž„๋ณด๋‹ค ์ง์ ‘ ์ˆ˜ํ–‰์ด ๋‚ซ๋‹ค. sed 's/;$//'๋กœ 3๊ฐœ ํŒŒ์ผ์„ 1์ดˆ์— ์ฒ˜๋ฆฌ.

.

4๏ธโƒฃ. Sisyphus (์ง์ ‘ ์ˆ˜ํ–‰) โ€” ํ•ต์‹ฌ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

๊ฐ€์žฅ ๋งŽ์€ ์ž‘์—…์„ ์ง์ ‘ ์ˆ˜ํ–‰. ์œ„์ž„ํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š” ์ปจํ…์ŠคํŠธ ์˜์กด์„ฑ์ด ๋†’์€ ์ž‘์—…์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ:

์ž‘์—… ์ง์ ‘ ์ˆ˜ํ–‰ ์ด์œ  ์ „๋žต
useWeekNavigation ํ›… ์ƒ์„ฑ + 5๊ฐœ ์ปดํฌ๋„ŒํŠธ ์ ์šฉ 5๊ฐœ ํŒŒ์ผ์˜ ๊ธฐ์กด ๋กœ์ง์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•œ ์ƒํƒœ์—์„œ๋งŒ ์•ˆ์ „ํ•œ ์ถ”์ถœ ๊ฐ€๋Šฅ ๊ณตํ†ต ํŒจํ„ด์„ ํ›…์œผ๋กœ ์ถ”์ถœ โ†’ ๊ฐ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํ›… ํ˜ธ์ถœ๋กœ ๊ต์ฒด
dataManager.js ์ค‘๋ณต์ œ๊ฑฐ 6๊ฐœ export ํ•จ์ˆ˜์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋‚ด๋ถ€๋งŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ transformWeeklyData, upsertRecord, upsertPrayerRequest 3๊ฐœ ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜ ์ƒ์„ฑ โ†’ ๊ธฐ์กด 6๊ฐœ ํ•จ์ˆ˜๋ฅผ thin wrapper๋กœ ๋ณ€ํ™˜ (ํ•˜์œ„ํ˜ธํ™˜ ์œ ์ง€)
applyOptimisticUpdate ์œ ํ‹ธ StudentList/TeacherList ๋‘ ํŒŒ์ผ์˜ ~20์ค„ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•ด์•ผ ์ถ”์ถœ ๊ฐ€๋Šฅ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ์„ค๊ณ„ (React hook์ด ์•„๋‹˜) โ€” deep clone + ensure structure + apply updater
WeeklyListView ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ PrayerView(๋ฐฐ์—ด)์™€ NotesView(๋‹จ์ผ ๋ฌธ์ž์—ด)์˜ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๋ฅผ extractItems ์ฝœ๋ฐฑ์œผ๋กœ ์ถ”์ƒํ™” ๊ณตํ†ต ๋ Œ๋”๋ง ๋กœ์ง์„ ๊ณต์œ  ์ปดํฌ๋„ŒํŠธ๋กœ ์ถ”์ถœ, ๋ฐ์ดํ„ฐ ์ถ”์ถœ ๋กœ์ง๋งŒ ๊ฐ ๋ž˜ํผ์— ๋‚จ๊น€
AdminPanel ๋ž˜ํผ ์ œ๊ฑฐ App.jsx โ†” AdminPanel โ†” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ 3์ธต ๊ฐ„์˜ prop ํ๋ฆ„์„ ์ •ํ™•ํžˆ ์ถ”์ ํ•ด์•ผ ํ•จ passthrough ํ•ธ๋“ค๋Ÿฌ 3๊ฐœ ์ œ๊ฑฐ โ†’ setData ์ง์ ‘ ์ „๋‹ฌ, ๋ถˆํ•„์š”ํ•œ prop 2๊ฐœ ์ œ๊ฑฐ

.

์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ ์š”์•ฝ

Phase 1: ์ง„๋‹จ

  • Sisyphus โ†’ npm run lint, npm run build๋กœ ํ˜„์žฌ ์ƒํƒœ ํŒŒ์•…
  • Explore โ†’ ๋ณ‘๋ ฌ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค ํŒจํ„ด/์ค‘๋ณต ํƒ์ƒ‰

Phase 2: ๊ธด๊ธ‰ ์ˆ˜์ • (blocking issues)

  • Sisyphus ์ง์ ‘ โ†’ ESLint ์—๋Ÿฌ 3๊ฑด ์ˆ˜์ • (CI ๋…น์ƒ‰ ํ™•๋ณด)

Phase 3: ๊ตฌ์กฐ์  ๊ฐœ์„  (high-impact)

  • Sisyphus ์ง์ ‘ โ†’ ํ›… ์ถ”์ถœ, ์œ ํ‹ธ ์ƒ์„ฑ, ์ค‘๋ณต ์ œ๊ฑฐ
  • AST-grep โ†’ JSON.parse ํŒจํ„ด ์ผ๊ด„ ์น˜ํ™˜ (7๊ฑด)

Phase 4: ์Šคํƒ€์ผ ํ†ต์ผ (cosmetic)

  • Junior ์œ„์ž„ โ†’ ClassManagement, TeacherManagement ์Šคํƒ€์ผ ๋ณ€๊ฒฝ
  • Sisyphus ์ง์ ‘ (sed) โ†’ ๋‚˜๋จธ์ง€ ํŒŒ์ผ ์„ธ๋ฏธ์ฝœ๋ก  ์ œ๊ฑฐ

Phase 5: ๊ฒ€์ฆ

  • npm run lint โ†’ 0 errors
  • npm run build โ†’ ์„ฑ๊ณต (749ms)

ํ•ต์‹ฌ ์›์น™: ๋ณต์žกํ•œ ํŒ๋‹จ์ด ํ•„์š”ํ•œ ์ž‘์—…์€ ์ง์ ‘, ๊ธฐ๊ณ„์  ๋ฐ˜๋ณต์€ ์œ„์ž„(๋˜๋Š” ๋„๊ตฌ). ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค lint/build๋กœ ํšŒ๊ท€ ๊ฒ€์ฆ.

Reference

oh my opencode

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
๋งํฌ
Total
Today
Yesterday