Skip to content
m16khb-orgPublic

About

IssueOps: issue-driven agent workflows for Codex, Claude Code, and Omo

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

ย 

History

2,939 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

IssueOps

์ฝ”๋”ฉ ์—์ด์ „ํŠธ๊ฐ€ ๋ฐฐ์šด ๊ฒƒ์„ ์ฝ”๋“œ์™€ ๊ฐ™์€ PR์— ๋‚จ๊ธฐ๋Š” ํŒ€์˜ ๊ธฐ์–ต
ํ•œ ์‚ฌ๋žŒ์˜ ์—์ด์ „ํŠธ๊ฐ€ ์•Œ์•„๋‚ธ ํ•จ์ •๊ณผ ๊ฒฐ์ •์„ ์ €์žฅ์†Œ์— ๊ธฐ๋กํ•˜๊ณ ,
๋‹ค์Œ ์ž‘์—…์—์„œ ํŒ€์›์˜ ์—์ด์ „ํŠธ๊ฐ€ ๊ทธ ๊ธฐ๋ก์„ ๋จผ์ € ์ฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค

ํ•œ๊ตญ์–ด ยท English

ํŒ€์› A์˜ ์—์ด์ „ํŠธ๊ฐ€ ์ฐพ์€ caution๊ณผ ADR์ด PR์— ๋‹ด๊ฒจ ์ €์žฅ์†Œ์— ๋ณ‘ํ•ฉ๋˜๊ณ , ํŒ€์› B์˜ ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—… ์ „์— ๊ทธ ๊ธฐ๋ก์„ ๋ฐ›๋Š” ํ๋ฆ„

์ฝ”๋”ฉ ์—์ด์ „ํŠธ์™€ ์ผํ•˜๋‹ค ๋ณด๋ฉด ์‹œ๊ฐ„์„ ๋“ค์—ฌ ๊ฒจ์šฐ ์ฐพ์•„๋‚ธ ํ•จ์ •์ด๋‚˜ ์—ฌ๋Ÿฌ ๋Œ€์•ˆ์„ ๋น„๊ตํ•ด์„œ ๋‚ด๋ฆฐ ๊ฒฐ์ •์ด ์ƒ๊น๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋‚ด์šฉ์€ ๋ณดํ†ต ํ•œ ์‚ฌ๋žŒ์˜ ๋Œ€ํ™” ๊ธฐ๋ก์—๋งŒ ๋‚จ์•„์„œ, ํŒ€์›์˜ ์—์ด์ „ํŠธ๋Š” ๊ฐ™์€ ํ•จ์ •์— ๋‹ค์‹œ ๋น ์ง€๊ณ  ์ด๋ฏธ ๊ธฐ๊ฐํ•œ ๋Œ€์•ˆ์„ ๋‹ค์‹œ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

IssueOps๋Š” ์ด ๋‚ด์šฉ์„ caution(ํ•จ์ •๊ณผ ํ•ด๊ฒฐ์„ ์ ์€ ์ฃผ์˜ ๊ธฐ๋ก)๊ณผ ADR(์„ค๊ณ„ ๊ฒฐ์ • ๊ธฐ๋ก)๋กœ ์ €์žฅ์†Œ์— ๋‚จ๊ธฐ๋Š” ๋กœ์ปฌ Go ํ•˜๋„ค์Šค์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ก์€ ์ด์Šˆ ํ•˜๋‚˜๋ฅผ ๋‹จ์œ„๋กœ ์ง„ํ–‰ํ•˜๋Š” ์ด์Šˆ โ†’ ๊ณ„ํš โ†’ ๊ตฌํ˜„ โ†’ ๊ฒ€์ฆ โ†’ PR/MR โ†’ ์ •๋ฆฌ ์‚ฌ์ดํด ์•ˆ์—์„œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ”๋€ ์ฝ”๋“œ์™€ ๊ฐ™์€ PR์— ๋‹ด๊ฒจ ํ•จ๊ป˜ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ณ„ํš์— ์ ์šฉ๋˜๋Š” ๊ฒฐ์ •๊ณผ ์ฃผ์˜์‚ฌํ•ญ ์„น์…˜์ด ์—†์œผ๋ฉด ๊ณ„ํš์ด ํ†ต๊ณผํ•˜์ง€ ์•Š๊ณ , ๋ฌธ์„œ ๋ฐ˜์˜ ํŒ์ •์„ ๋‚จ๊ธฐ์ง€ ์•Š์œผ๋ฉด PR์„ ๋ฐœํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํŒ€ ์ง€์‹์ด ์ด์–ด์ง€๋Š” ๋ฐฉ์‹ ยท ์ด์Šˆ๊ฐ€ ํ•˜๋Š” ์ผ ยท ์‚ฌ์ดํด์ด ํ•จ๊ป˜ ๋งก๋Š” ์ผ ยท ๋น ๋ฅธ ์‹œ์ž‘ ยท ์ฒซ ์ž‘์—… ์‹œ์ž‘ ยท ์•„ํ‚คํ…์ฒ˜ ยท ๋ฌธ์ œ ํ•ด๊ฒฐ

ํŒ€ ์ง€์‹์ด ์ด์–ด์ง€๋Š” ๋ฐฉ์‹

์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…ํ•˜๋‹ค ํ•จ์ •์„ ๋งŒ๋‚˜๋ฉด caution์„, ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋ฉด ADR์„ ํ•œ ๊ฑด์”ฉ .issueops/cautions/์™€ .issueops/adr/์— ๋‚จ๊น๋‹ˆ๋‹ค. ๊ธฐ๋ก์€ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์ด๋ผ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ปค๋ฐ‹๋˜๊ณ  PR์—์„œ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํŒ€์›์ด git pull๋กœ ๊ธฐ๋ก์„ ๋ฐ›์œผ๋ฉด, Codex, Claude Code, Omo native, omp, opencode ์ค‘ ์–ด๋А ํ˜ธ์ŠคํŠธ๋ฅผ ์“ฐ๋“  ๊ฐ™์€ ๊ธฐ๋ก์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๋งจ ์œ„ ๊ทธ๋ฆผ์ด ์ด ํ๋ฆ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์— ์—†๋Š” ๋‹จ๊ณ„๊ฐ€ ๋‘˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ€์›์˜ ์—์ด์ „ํŠธ๋Š” ๊ธฐ๋ก ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ route-docs๊ฐ€ ์ž‘์—…์— ๋งž์ถฐ ๊ณ ๋ฅธ ๊ธฐ๋ก๋งŒ ์ฝ๊ณ , ๊ทธ ์ž‘์—…์—์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๋„ ๋‹ค์‹œ ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ๋ก์€ ์ž‘์—…์ด ๊ฑฐ๋“ญ๋ ์ˆ˜๋ก ์Œ“์ž…๋‹ˆ๋‹ค.

์‹ค์ œ ๊ธฐ๋ก๊ณผ ์กฐํšŒ ์˜ˆ

์ด ์ €์žฅ์†Œ๋„ .issueops/cautions/์™€ .issueops/adr/์— ๊ธฐ๋ก์„ ์Œ“์œผ๋ฉฐ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์ค‘ caution ํ•˜๋‚˜๋ฅผ ์˜ˆ๋กœ ๋“ญ๋‹ˆ๋‹ค. 2026-08-28-gitlab-workitem-labels-...๋Š” GitLab WorkItem์ด labelsยทassignees๋ฅผ ์œ„์ ฏ์œผ๋กœ๋งŒ ๋…ธ์ถœํ•ด์„œ remote create-child๊ฐ€ ์‹คํŒจํ–ˆ๊ณ , ๊ฐ€์งœ glab ์Šคํ…์ด ์ž˜๋ชป๋œ ์‘๋‹ต์„ ๊ทธ๋Œ€๋กœ ๋Œ๋ ค์ค˜ ํ…Œ์ŠคํŠธ๋Š” ๊ณ„์† ํ†ต๊ณผํ–ˆ๋‹ค๋Š” ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ก์—๋Š” Summary, Context, Resolution, Evidence ํ•ญ๋ชฉ์ด ์žˆ์–ด์„œ ๋ฌด์—‡์ด ์™œ ๊นจ์กŒ๊ณ  ์–ด๋–ป๊ฒŒ ๊ณ ์ณค๋Š”์ง€๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์ค‘์— GitLab ํ•˜์œ„ ์ด์Šˆ๋ฅผ ๊ฑด๋“œ๋ฆฌ๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋ฉด route-docs๊ฐ€ ์ด ๊ธฐ๋ก์„ ๊ณจ๋ผ ์ค๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์‹ค์ œ ์ถœ๋ ฅ์˜ docs ๋ฐฐ์—ด ์ค‘ ํ•ด๋‹น ํ•ญ๋ชฉ์ด๋ฉฐ, ์ ˆ๋Œ€ ๊ฒฝ๋กœ์ธ path ํ•„๋“œ๋งŒ ๋บ์Šต๋‹ˆ๋‹ค.

io project route-docs --repo . --task "gitlab child issue labels" --json
{
  "rel_path": ".issueops/cautions/2026-08-28-gitlab-workitem-labels-assignees-selection-create-child-glab.md",
  "reason": "past record \"GitLab WorkItem ์ง์† labels/assignees selection์ด create-child๋ฅผ ๋ง‰์•˜๊ณ  ๊ฐ€์งœ glab ์Šคํ…์ด ๊ทธ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ท„๋‹ค\" shares: child, gitlab, label",
  "exists": true
}

๊ธฐ๋ก์ด ๋น ์ง€์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ์žฅ์น˜

๊ธฐ๋ก์„ ๋‚จ๊ธฐ๋Š” ์ผ๊ณผ ์ฐพ์•„ ์ฝ๋Š” ์ผ์„ ์‚ฌ๋žŒ์˜ ๊ธฐ์–ต์— ๋งก๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹œ์  ์žฅ์น˜ ๋™์ž‘
๊ธฐ๋ก project append (MCP project_docs_append) ๋‚ ์งœ๊ฐ€ ๋ถ™์€ ๊ธฐ๋ก ํ•œ ๊ฑด์„ .issueops/cautions/ ๋˜๋Š” .issueops/adr/์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
์ž‘์—… ์‹œ์ž‘ project route-docs (MCP project_docs_route) ์ž‘์—… ์„ค๋ช…๊ณผ ๋‹จ์–ด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ๊ฒน์น˜๋Š” ๊ณผ๊ฑฐ ๊ธฐ๋ก์„ ์ตœ๋Œ€ ๋‹ค์„ฏ ๊ฑด ๊ณ ๋ฅด๊ณ , ๊ฒน์นœ ๋‹จ์–ด๋ฅผ ํ•จ๊ป˜ ๋Œ๋ ค์ค๋‹ˆ๋‹ค
๊ณ„ํš link-plan ๊ฒŒ์ดํŠธ ๊ณ„ํš์— ## ์ ์šฉ๋˜๋Š” ๊ฒฐ์ •๊ณผ ์ฃผ์˜์‚ฌํ•ญ ์„น์…˜์ด ์—†์œผ๋ฉด ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค
๋ฌธ์„œ ๋ฐ˜์˜(6๋‹จ๊ณ„) project-docs-review record ๊ฒŒ์ดํŠธ ๋ฌธ์„œ๋ฅผ ๊ณ ์ณค๋Š”์ง€, ์ฝ์–ด ๋ณด๊ณ  ๋ฐ”๊ฟ€ ๊ฒƒ์ด ์—†๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋Š”์ง€๋ฅผ ๋ณ€๊ฒฝ ์ง‘ํ•ฉ์˜ fingerprint์— ๋ฌถ์–ด ๋‚จ๊น๋‹ˆ๋‹ค

๊ณ„ํš ๋‹จ๊ณ„์˜ issueops-plan ์Šคํ‚ฌ์€ route-docs๋กœ ๊ณ ๋ฅธ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ , ์ด๋ฒˆ ์ž‘์—…์— ์ ์šฉ๋˜๋Š” ๊ฒฐ์ •๊ณผ ์ฃผ์˜์‚ฌํ•ญ์„ ๊ทธ ์„น์…˜์— ์ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ ๋ฐ˜์˜ ํŒ์ •์„ ๋‚จ๊ธด ๋’ค์— diff๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํŒ์ •์ด ๋ฌดํšจ๊ฐ€ ๋˜์–ด 6๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๊ทœ์น™์€ ๊ทœ์น™์„ ์ง€ํ‚ค๊ฒŒ ํ•˜๋Š” ์„ธ ์ธต์— ์žˆ์Šต๋‹ˆ๋‹ค.

route-docs๋Š” ์˜๋ฏธ ๊ฒ€์ƒ‰์ด ์•„๋‹ˆ๋ผ ๋‹จ์–ด๊ฐ€ ๊ฒน์น˜๋Š” ์ •๋„๋กœ ๊ธฐ๋ก์„ ๊ณ ๋ฆ…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์—๋Š” ๊ณ ๋ฅธ ์ด์œ (๊ฒน์นœ ๋‹จ์–ด)๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ด€๋ จ ๊ธฐ๋ก์„ ์ฐพ์œผ๋ ค๋ฉด ์ž‘์—… ์„ค๋ช…์— ๊ฑด๋“œ๋ฆด ํŒŒ์ผ๊ณผ ๋™์ž‘์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ก์ด ๋‚˜์ค‘์— ์ฝ”๋“œ์™€ ์–ด๊ธ‹๋‚˜๋„ IssueOps๊ฐ€ ์ด๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„๋‚ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ก์€ ๊ธฐ๋ก์€ ๋ฌธ์„œ ๋ฐ˜์˜ ๋‹จ๊ณ„๋‚˜ PR ๋ฆฌ๋ทฐ์—์„œ ์‚ฌ๋žŒ์ด ๊ณ ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AGENTS.md, ์—์ด์ „ํŠธ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€์š”?

AGENTS.mdยทCLAUDE.md ์—์ด์ „ํŠธ ์ž์ฒด ๋ฉ”๋ชจ๋ฆฌ IssueOps ๊ธฐ๋ก
๋ˆ„๊ฐ€ ์“ฐ๋‚˜์š” ์‚ฌ๋žŒ์ด ์ง์ ‘ ์—์ด์ „ํŠธ๊ฐ€ ๋Œ€ํ™”๋ฅผ ๋ณด๊ณ  ์Šค์Šค๋กœ ์—์ด์ „ํŠธ๊ฐ€ ์“ฐ๊ณ , ์‚ฌ๋žŒ์ด PR์—์„œ ๋ฆฌ๋ทฐ
์–ด๋””์— ๋‚จ๋‚˜์š” ์ €์žฅ์†Œ์˜ ํŒŒ์ผ ํ•˜๋‚˜ ๊ฐ์ž์˜ ์ปดํ“จํ„ฐ ์ €์žฅ์†Œ์˜ .issueops/, ๊ธฐ๋ก ํ•œ ๊ฑด๋‹น ํŒŒ์ผ ํ•˜๋‚˜
ํŒ€์›์—๊ฒŒ ์ „๋‹ฌ๋˜๋‚˜์š” git์œผ๋กœ ์ „๋‹ฌ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ git์œผ๋กœ ์ „๋‹ฌ
์—์ด์ „ํŠธ๊ฐ€ ๋ฌด์—‡์„ ์ฝ๋‚˜์š” ์„ธ์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ํŒŒ์ผ ์ „์ฒด ๋„๊ตฌ๊ฐ€ ์ •ํ•œ ๋ฒ”์œ„ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ก๋งŒ
์–ธ์ œ ์“ฐ๋‚˜์š” ๋ˆ„๊ตฐ๊ฐ€ ๋– ์˜ฌ๋ ธ์„ ๋•Œ ๋„๊ตฌ๊ฐ€ ํŒ๋‹จํ–ˆ์„ ๋•Œ ์•Œ๊ฒŒ ๋œ ์ฆ‰์‹œ, ๋Šฆ์–ด๋„ ๋ฌธ์„œ ๋ฐ˜์˜ ๋‹จ๊ณ„์—์„œ

์—์ด์ „ํŠธ ์ž์ฒด ๋ฉ”๋ชจ๋ฆฌ ์—ด์€ Claude Code์˜ ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. Claude Code ๊ณต์‹ ๋ฌธ์„œ๋Š” ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปดํ“จํ„ฐ๋งˆ๋‹ค ๋”ฐ๋กœ ์ €์žฅ๋˜๊ณ  ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์™€ ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฌธ์„œ๋Š” CLAUDE.md๋ฅผ 200์ค„ ์ดํ•˜๋กœ ์œ ์ง€ํ•˜๋ผ๊ณ  ๊ถŒํ•˜๋Š”๋ฐ, ํŒŒ์ผ์ด ๊ธธ์ˆ˜๋ก ์ปจํ…์ŠคํŠธ๋ฅผ ๋” ์“ฐ๊ณ  ์ง€์‹œ๋ฅผ ๋œ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

IssueOps๋Š” AGENTS.md๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. bootstrap์ด AGENTS.md์— ๋ฌธ์„œ ์•ˆ๋‚ด ๋ธ”๋ก์„ ๋„ฃ๊ณ , ์ €์žฅ์†Œ ๊ณตํ†ต ๊ทœ์น™์€ ๊ณ„์† AGENTS.md์™€ .issueops/ ์šด์˜ ๋ฌธ์„œ์— ๋‘ก๋‹ˆ๋‹ค. ์„ธ์…˜๋งˆ๋‹ค ์ฝ์–ด์•ผ ํ•  ๊ทœ์น™์€ AGENTS.md์—, ํŠน์ • ์ž‘์—…์—์„œ๋งŒ ํ•„์š”ํ•œ ํ•จ์ •๊ณผ ๊ฒฐ์ •์€ ๊ธฐ๋ก์œผ๋กœ ๋‚˜๋ˆ  ๋‘๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์‚ฌ์ดํด ์—†์ด ์“ฐ๊ธฐ

์ฒซ ์ž‘์—… ์‹œ์ž‘์˜ bootstrap์„ ๋งˆ์นœ ์ €์žฅ์†Œ๋ผ๋ฉด ๊ธฐ๋ก๊ณผ ์กฐํšŒ๋งŒ ๋”ฐ๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

io project append --repo . --kind caution \
  --title "Stripe webhook retries reuse the event id" \
  --summary "Deduplicate webhook handling by event id" --json
git add .issueops && git commit -m "docs: record webhook caution"

# ํŒ€์›์˜ ์ฒดํฌ์•„์›ƒ์—์„œ
io project route-docs --repo . --task "fix payment webhook retry handling" --json

ํŒ€์ด ๊ณต์œ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ์ž ๋‚จ๋Š” ๊ฒƒ

๊ตฌ๋ถ„ ๋‚ด์šฉ ์œ„์น˜
ํŒ€์ด ๊ณต์œ  ์šด์˜ ๋ฌธ์„œ, cautionยทADR ๊ธฐ๋ก ์ €์žฅ์†Œ์˜ AGENTS.md์™€ .issueops/. git์œผ๋กœ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค
๊ฐ์ž ๋กœ์ปฌ ์‚ฌ์ดํด ์ง„ํ–‰ ์ƒํƒœ, ๊ฒ€์ฆ ๊ทผ๊ฑฐ ~/.local/state/issueops/์˜ SQLite ์ €์žฅ์†Œ
๊ฐ์ž ๋กœ์ปฌ ์Šคํ‚ฌ ๋งํฌ, MCPยทhook ์„ค์ • ์‚ฌ์šฉ์ž ํ™ˆ์˜ ํ˜ธ์ŠคํŠธ ์„ค์ •. ์„ค์น˜ํ•  ๋•Œ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค

์ด์Šˆ๊ฐ€ ํ•˜๋Š” ์ผ

IssueOps์˜ Issue๋Š” ์ž‘์—… ๋‹จ์œ„์ธ ์ด์Šˆ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ดํด ํ•˜๋‚˜๋Š” ์ด์Šˆ ํ•˜๋‚˜์—์„œ ์‹œ์ž‘ํ•˜๊ณ , ๋ธŒ๋žœ์น˜์™€ ๊ณ„ํš, PR, ๋จธ์ง€ ํ›„ ๊ฒฐ๊ณผ ๋ณด๊ณ ๊ฐ€ ๋ชจ๋‘ ๊ทธ ์ด์Šˆ ๋ฒˆํ˜ธ์— ๋ฌถ์ž…๋‹ˆ๋‹ค. caution๊ณผ ADR์ด ๋ฌด์—‡์„ ๋ฐฐ์› ๋Š”์ง€๋ฅผ ๋‚จ๊ธด๋‹ค๋ฉด, ์ด์Šˆ๋Š” ๋ฌด์—‡์„ ํ•˜๋ ค ํ–ˆ๊ณ  ์–ด๋””๊นŒ์ง€ ๋๋ƒˆ๋Š”์ง€๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค.

์‹œ์  ์ด์Šˆ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ
์‹œ์ž‘ issueops-create-issue๊ฐ€ ์กฐ์‚ฌ์™€ ํ™•์ธ ์งˆ๋ฌธ์œผ๋กœ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •ํ•œ ๋’ค ์ด์Šˆ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ตฌํ˜„ ์ด์Šˆ ๋ณธ๋ฌธ์—๋Š” ์š”์•ฝ, ๋ฐฐ๊ฒฝ, ์™„๋ฃŒ ๊ธฐ์ค€, ๋ฒ”์œ„, ๊ฒ€์ฆ ์„น์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
๋ธŒ๋žœ์น˜ <์ด์Šˆ ๋ฒˆํ˜ธ>-<slug> ์ด๋ฆ„์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. GitHub์—์„œ๋Š” linked branch๋กœ ์ด์Šˆ์— ์—ฐ๊ฒฐํ•˜๊ณ , GitLab์—์„œ๋Š” ์ด ์ด๋ฆ„ ๊ทœ์น™์œผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค
๊ณ„ํš ๊ณ„ํš ๊ฒ€ํ† ์˜ ์ง„ํ–‰ ํ๋ฆ„์ด ์ด์Šˆ ๋ณธ๋ฌธ์˜ ๊ด€๋ฆฌ ์˜์—ญ์— ํ•œ ์ค„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค
๊ตฌํ˜„ ๊ณ„ํšยท์•„ํ‚คํ…์ฒ˜ยท์˜๋„ยท๋ช…์„ธยท๊ณ„ํš ๊ฒ€ํ†  ์‚ฌ๋ณธ(plan.md, architecture.md, intent.md, spec.md, plan-review.md)์„ .issueops/issues/<n>/์— ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค. ๋ช…์„ธ์™€ ๊ณ„ํš ๊ฒ€ํ†  ์‚ฌ๋ณธ์€ ํ•ด๋‹น ์ž๋ฃŒ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์ƒ๊น๋‹ˆ๋‹ค
๋ฐœํ–‰ ์ด์Šˆ์— ์—ฐ๊ฒฐ๋œ ๋ธŒ๋žœ์น˜์—์„œ PR์„ ๋งŒ๋“ค๊ณ , cautionยทADR ๊ธฐ๋ก์ด ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๋‹ด๊น๋‹ˆ๋‹ค
๋จธ์ง€ ํ›„ ์‚ฌ๋žŒ์ด ์“ด ์ง„ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ด์Šˆ ๋ณธ๋ฌธ์— ๋ฐ˜์˜ํ•˜๊ณ  ์ด์Šˆ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค

์ด์Šˆ ๋ณธ๋ฌธ์€ ํŒ€์›์ด ์ฝ๋Š” ๋ฌธ์„œ๋ผ์„œ ์š”์•ฝ์„ ๋จผ์ € ์“ฐ๊ณ  ์งง๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ๋‚˜ ๊ณ„ํš ์ „๋ฌธ ๊ฐ™์€ ๊ตฌํ˜„ ์ž๋ฃŒ๋Š” ๋ณธ๋ฌธ์— ๋„ฃ์ง€ ์•Š๊ณ  .issueops/issues/<n>/์— ๋‘ก๋‹ˆ๋‹ค (๊ด€๋ จ ADR). ๊ธฐ๋ก์˜ Source: ์ค„์— ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ์ ์–ด ๋‘๋ฉด, ๊ทธ ADR์˜ Source: IssueOps #513์ฒ˜๋Ÿผ ํŒ€์›์ด ๊ธฐ๋ก์—์„œ ์ด์Šˆ๋กœ, ์ด์Šˆ์—์„œ .issueops/issues/<n>/์˜ ๊ณ„ํš์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…์ด ํฌ๋ฉด ํ•˜์œ„ ์ด์Šˆ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ํ•˜์œ„ ์ด์Šˆ๋Š” ๊ฐ์ž ์‚ฌ์ดํด์„ ๊ฑฐ์น˜๊ณ , ๋ถ€๋ชจ ์‚ฌ์ดํด์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„๋“ค์ด๊ฑฐ๋‚˜ (child accept) ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค(child reject).

์‚ฌ์ดํด์ด ํ•จ๊ป˜ ๋งก๋Š” ์ผ

๊ฐ™์€ ์‚ฌ์ดํด์€ Codex, Claude Code, Omo native, omp, opencode ์ค‘ ์–ด๋А ํ˜ธ์ŠคํŠธ์—์„œ ์ด์–ด๋ฐ›์•„๋„ ๊ฐ™์€ ์‹คํ–‰ ๊ณ„์•ฝ๊ณผ ๊ทœ์น™์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‹ค์„ฏ ํ˜ธ์ŠคํŠธ๋Š” ๊ณตํ†ต CLIยทMCPยท์Šคํ‚ฌ์„ ์“ฐ๊ณ , ์ž‘์—… ์ƒํƒœ์™€ ๊ฒ€์ฆ ๊ทผ๊ฑฐ๋Š” ํ˜ธ์ŠคํŠธ ๋ฐ– ๋กœ์ปฌ SQLite์— ๋‚จ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ก์„ ์ฝ๊ณ  ๋‚จ๊ธฐ๊ฒŒ ํ•˜๋Š” ๊ฒŒ์ดํŠธ ๋ง๊ณ ๋„ IssueOps๋Š” ๋‹ค์Œ ์ผ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ์„ธ์…˜์„ ๋ฐ”๊ฟ”๋„ ์ด์–ด์„œ ์ž‘์—…: ์—ฐ๊ฒฐ๋œ ์ด์Šˆยท๋ธŒ๋žœ์น˜ยทworktreeยท๊ณ„ํš๊ณผ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒ€์ฆํ•œ ๋ณ€๊ฒฝ๋งŒ ๋ฐœํ–‰: ๋ฆฌ๋ทฐ์™€ ๋ฌธ์„œ ํŒ์ •์„ ๋ณ€๊ฒฝ ์ง‘ํ•ฉ์˜ fingerprint์— ๋ฌถ์–ด, ์ˆ˜์ • ๋’ค์—๋Š” ๋‹ค์‹œ ๊ฒ€์ฆํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘๋ณต ์‹คํ–‰๊ณผ ์›๊ฒฉ ์ƒ์„ฑ ๋ฐฉ์ง€: ์‹คํ–‰ ๊ถŒํ•œ(lease), ์„ธ๋Œ€ ๋ฒˆํ˜ธ, CAS๋กœ ๋ณ€๊ฒฝ ์ฃผ์ฒด๋ฅผ ํ™•์ธํ•˜๊ณ  ์‘๋‹ต์ด ๋ถˆ๋ถ„๋ช…ํ•˜๋ฉด ๋ณต๊ตฌ ์ ˆ์ฐจ๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜ธ์ŠคํŠธ ๊ฐ„ ๊ทœ์น™ ๊ณต์œ : skills/ ์›๋ณธ๊ณผ .issueops/ ์šด์˜ ๋ฌธ์„œ๋ฅผ CodexยทClaude CodeยทOmo nativeยทompยทopencode์—์„œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

PR/MR ๋ฐœํ–‰ ์™„๋ฃŒ, ๋จธ์ง€, ์ •๋ฆฌ๋Š” ๋ณ„๋„ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ๋ฒ”์œ„๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋ฉฐ, ๋ฐœํ–‰๋งŒ ์š”์ฒญํ•œ ์ž‘์—…์„ ์ž„์˜๋กœ ๋จธ์ง€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทœ์น™์„ ์ง€ํ‚ค๊ฒŒ ํ•˜๋Š” ์„ธ ์ธต

๊ทœ์น™์€ ์–ด๊ฒผ์„ ๋•Œ ๋“œ๋Š” ๋น„์šฉ์— ๋”ฐ๋ผ ์„ธ ์ธต์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

์ธต ๋‹ด๋Š” ๊ฒƒ ์˜ˆ
๋ฌธ๋งฅ(hook) ์„ธ์…˜์— ํ•„์š”ํ•œ ์ •์  ์ •๋ณด. ์ƒํƒœ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค SessionStartยทSubagentStart๊ฐ€ .issueops/ ๋ฌธ์„œ ๋ชฉ๋ก์„ ๋„ฃ์Šต๋‹ˆ๋‹ค
์ ˆ์ฐจ(์Šคํ‚ฌ) ํŒ๋‹จ์ด ํ•„์š”ํ•œ ์ˆœ์„œ์™€ ๊ธฐ์ค€. ์–ด๊ธฐ๋ฉด ๋ฆฌ๋ทฐ์—์„œ ์žก์Šต๋‹ˆ๋‹ค ๊ณ„ํš ์ „์— CONSTITUTIONยทCAUTIONSยทADR์„ ์ฝ๊ณ  ## ์ ์šฉ๋˜๋Š” ๊ฒฐ์ •๊ณผ ์ฃผ์˜์‚ฌํ•ญ์— ์ ์Šต๋‹ˆ๋‹ค
๊ฒŒ์ดํŠธ(CLI) ์–ด๊ธฐ๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ๋ง‰ํž™๋‹ˆ๋‹ค. fingerprint๋กœ ์‚ฌ์ดํด ์ƒํƒœ์— ๋ด‰์ธํ•ฉ๋‹ˆ๋‹ค architecture review์˜ ํ•„์ˆ˜ ์„น์…˜ ๊ฒ€์‚ฌ, link-plan์˜ ํ•„์ˆ˜ ์„น์…˜ ๊ฒ€์‚ฌ, project_docs_review ๋ฐœํ–‰ ๊ฒŒ์ดํŠธ
  • architecture review๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œ์— ## ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๊ทœ๋ชจ, ## ๋ฐ์ดํ„ฐ์™€ API ๊ณ„์•ฝ, ## ๊ตฌ์กฐ์™€ ํ๋ฆ„, ## ๋ณ‘๋ชฉ๊ณผ ์žฅ์• , ## ์ ˆ์ถฉ์ ๊ณผ ๊ธฐ๊ฐํ•œ ๋Œ€์•ˆ ๋‹ค์„ฏ ์„น์…˜์ด ๋ชจ๋‘ ์žˆ๊ณ  ๋ณธ๋ฌธ์ด ๋น„์–ด ์žˆ์ง€ ์•Š์•„์•ผ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์Šน์ธ์€ ๋ฌธ์„œ์˜ sha256์— ๋ฌถ์ด๋ฏ€๋กœ, ์Šน์ธํ•œ ๋’ค ๋ฌธ์„œ๋ฅผ ๊ณ ์น˜๋ฉด architecture_review_stale์ด ๋˜์–ด ๋‹ค์‹œ ์Šน์ธ์„ ๋ฐ›์•„์•ผ ๊ณ„ํš ์ž‘์„ฑ์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.
  • link-plan์€ ## ์ ์šฉ๋˜๋Š” ๊ฒฐ์ •๊ณผ ์ฃผ์˜์‚ฌํ•ญ, ## ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ๊ตฌํ˜„, ## ์„ฑ๋Šฅ ์˜ํ–ฅ, ## ํ•˜์œ„ ํ˜ธํ™˜์„ฑ๊ณผ side effect ๋„ค ์„น์…˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์—†์œผ๋ฉด ๊ณ„ํš์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
  • project-docs-review record์˜ --verdict updated๋Š” --doc์œผ๋กœ ์ ์€ ๊ฒฝ๋กœ๊ฐ€ ๋ชจ๋‘ ์‹ค์ œ ๋ณ€๊ฒฝ์— ์žˆ์–ด์•ผ ํ•˜๊ณ , --verdict no-change๋Š” ์‹ค์ œ๋กœ ์ฝ์€ --reviewed-doc(.issueops/ ์•„๋ž˜ ๋ฌธ์„œ๋‚˜ AGENTS.md)์ด ํ•˜๋‚˜ ์ด์ƒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • devils-advocate review๋Š” ๊ณ„ํš ๋‹จ๊ณ„๋งˆ๋‹ค ๋ฉด์ œ ์—†๋Š” revise ํŒ์ •์„ ๋‹ค์„ฏ ๋ฒˆ๊นŒ์ง€๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์—ฌ์„ฏ ๋ฒˆ์งธ๋Š” ๊ฑฐ๋ถ€ํ•˜๊ณ , ์‹ค์ œ๋กœ ์—ด๋ ค ์žˆ๋Š” ํƒˆ์ถœ ๊ฒฝ๋กœ๋ฅผ ์˜ค๋ฅ˜์— ์ ์Šต๋‹ˆ๋‹ค.

hook์€ ์•„๋ฌด๊ฒƒ๋„ ๊ฐ•์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2026-08-27 ๊ฒฐ์ •์œผ๋กœ ๊ฐ•์ œ์šฉ hook์„ ๋ชจ๋‘ ์—†์•ด๊ณ , ๋‹จ๊ณ„๋ฅผ ์•Œ๋ ค ์ฃผ๋Š” hook์€ ๋‹จ๊ณ„ ํŒ์ •์„ ๋‘ ๊ณณ์— ๋‘๊ฒŒ ๋˜๋ฏ€๋กœ ์ฑ„ํƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทผ๊ฑฐ๋Š” ์„ค๊ณ„ ๊ฒฐ์ •์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘

ํ•„์ˆ˜ ํ™˜๊ฒฝ์€ Git, Go 1.26.6 ์ด์ƒ, ์‚ฌ์šฉํ•  ์ฝ”๋”ฉ ํ˜ธ์ŠคํŠธ ํ•˜๋‚˜ ์ด์ƒ์ž…๋‹ˆ๋‹ค. ์•„์ง ๊ณต๊ฐœ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์—†์–ด ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค(v0.1.0์€ Draft ์ƒํƒœ์ž…๋‹ˆ๋‹ค). GitHubยทGitLab์— ์ด์Šˆ๋‚˜ PR/MR์„ ์“ฐ๋ ค๋ฉด ํ•ด๋‹น provider์˜ CLI(ghยทglab)์™€ ์ธ์ฆ๋„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. Herdr์™€ ๋ธŒ๋ผ์šฐ์ € QA์šฉ Aside๋Š” ์„ ํƒ ์—ฐ๋™์ด๋ฉฐ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ฌ๊ณผ ์ด์ŠˆยทPR ํ…œํ”Œ๋ฆฟ์€ ํ˜„์žฌ ํ•œ๊ตญ์–ด๋กœ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

git clone https://github.com/m16khb-org/issueops.git
cd issueops

./install.sh --dry-run --json
./install.sh

./bin/issueops inspect --json
./bin/issueops doctor --repo . --json

Important

ํ˜„์žฌ ๋ฒ„์ „์€ 0.1.0์ž…๋‹ˆ๋‹ค. ์„ค์น˜๋Š” ์‚ฌ์šฉ์ž ํ™ˆ์˜ ํ˜ธ์ŠคํŠธ ์„ค์ •ยท์Šคํ‚ฌ ๋งํฌ์™€ ~/.local/bin ๋ช…๋ น์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € dry-run์˜ ๋Œ€์ƒ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•˜์„ธ์š”. install.sh๋Š” dry-run์—์„œ๋„ ๋กœ์ปฌ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ณ , ํ˜ธ์ŠคํŠธ ์„ค์ • ์“ฐ๊ธฐ๋งŒ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ๋’ค์—๋Š” ์ •์‹ ๋ช…๋ น issueops ๋˜๋Š” ์งง์€ ๋ณ„์นญ io๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋‹ค๋ฅธ ioยทissueops ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š์œผ๋ฉฐ ์ถฉ๋Œ ์‹œ ์„ค์น˜๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

์–ด๋””์— ์„ค์น˜๋˜๋‚˜์š”?

๋Œ€์ƒ ๊ธฐ๋ณธ ์œ„์น˜์™€ ์—ญํ• 
Codex ~/.codex/skills/, MCP ์„ค์ •, SessionStartยทSubagentStart hook
Claude Code ~/.claude/skills/, user-scope MCP, SessionStartยทSubagentStart hook
Omo native ~/.omo/agent/skills/, ~/.omo/mcp.json, lifecycle extension
omp ~/.omp/agent/skills/, ~/.omp/agent/mcp.json, ~/.omp/agent/extensions/issueops.js
opencode ~/.config/opencode/skills/, ~/.config/opencode/opencode.json์˜ mcp.servers.issueops, ~/.config/opencode/plugins/issueops.js(XDG_CONFIG_HOME์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค). lease๋Š” opencode --standalone ์„ธ์…˜๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
agy(Antigravity CLI) ~/.gemini/config/skills/, ~/.gemini/config/mcp_config.json. ํ•ญ์ƒ stdio๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  hook์€ ์—†์Šต๋‹ˆ๋‹ค
MCP ์„œ๋น„์Šค macOS LaunchAgent io.issueops.mcp ๋˜๋Š” Linux systemd user issueops-mcp.service. http://127.0.0.1:47831/mcp ํ•˜๋‚˜๋ฅผ CodexยทClaude CodeยทOmo nativeยทompยทopencode๊ฐ€ ํ•จ๊ป˜ ์”๋‹ˆ๋‹ค
์‹คํ–‰ ์ƒํƒœ ~/.local/state/issueops/ ์•„๋ž˜ SQLite ์ €์žฅ์†Œ. ISSUEOPS_STATE_DIR๋กœ ๊ฒฉ๋ฆฌ ๊ฐ€๋Šฅ
ํ”„๋กœ์ ํŠธ ์ง€์‹ ๋Œ€์ƒ ์ €์žฅ์†Œ์˜ AGENTS.mdยท.issueops/. ๋ช…์‹œ์ ์ธ project bootstrap์œผ๋กœ ์ƒ์„ฑ

์Šคํ‚ฌ์€ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ์ด ์ฒดํฌ์•„์›ƒ์˜ skills/๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ›„์—๋„ ์ฒดํฌ์•„์›ƒ์„ ์œ ์ง€ํ•˜์„ธ์š”. ๊ธฐ๋ณธ ์„ค์น˜๋Š” ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ์— ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --project-local์„ ๋ช…์‹œํ•˜๋ฉด project MCP ์„ค์ •์„ ์”๋‹ˆ๋‹ค. .mcp.json, .omo/mcp.json, .omp/mcp.json, .opencode/opencode.json์€ --mcp-transport=stdio์ผ ๋•Œ๋งŒ ๋งŒ๋“ค๊ณ , ๊ธฐ๋ณธ HTTP ์—ฐ๊ฒฐ์—์„œ๋Š” ์‚ฌ์šฉ์ž ํ™ˆ์˜ ํ•ญ๋ชฉ์„ ๊ทธ๋Œ€๋กœ ์”๋‹ˆ๋‹ค. agy์šฉ .agents/mcp_config.json์€ ์—ฐ๊ฒฐ ๋ฐฉ์‹๊ณผ ๊ด€๊ณ„์—†์ด ์”๋‹ˆ๋‹ค. ์Šคํ‚ฌ ๋งํฌ๋Š” ์–ด๋А ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉ์ž ํ™ˆ์—๋งŒ ๋‘ก๋‹ˆ๋‹ค.

macOS์™€ Linux์˜ ๊ธฐ๋ณธ MCP ์—ฐ๊ฒฐ์€ ๊ณต์šฉ HTTP ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค(--mcp-transport=http). ์„ค์น˜๊ธฐ๋Š” ~/.local/state/issueops/mcp-http/bearer์— ์ธ์ฆ ํ† ํฐ์„ ๋งŒ๋“ค๊ณ , ๋‹ค์„ฏ ํ˜ธ์ŠคํŠธ ์„ค์ •์˜ issueops ํ•ญ๋ชฉ๋งŒ URL๊ณผ Authorization ํ—ค๋”๋กœ ๋ฐ”๊พผ ๋’ค ํŒŒ์ผ ๊ถŒํ•œ์„ 0600์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ์„ธ์…˜๋งˆ๋‹ค issueops mcp๋ฅผ ๋”ฐ๋กœ ๋„์šฐ๋ ค๋ฉด ./install.sh --mcp-transport=stdio๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ƒํƒœ๋Š” io mcp service status --json์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. HTTP๋กœ workspace ๋„๊ตฌ๋ฅผ ๋ถ€๋ฅด๋Š” ์„ธ์…˜์€ ๋จผ์ € io mcp authorize --workspace-root <repo> ...๋กœ ๊ถŒํ•œ ํŒŒ์ผ์„ ๋ฐœ๊ธ‰๋ฐ›๊ณ , ํ˜ธ์ถœํ•  ๋•Œ ๊ทธ ๊ฒฝ๋กœ๋ฅผ authority_file๋กœ ๋„˜๊น๋‹ˆ๋‹ค. ๊ฐ™์€ OS ์‚ฌ์šฉ์ž์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ด ํŒŒ์ผ๋“ค์„ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ ๋ขฐ ๊ฒฝ๊ณ„๋Š” OS ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.

์„ค์น˜ ์˜ต์…˜๊ณผ ์„ ํƒ์  upstream pluginยทskill ์ค€๋น„๋Š” ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

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

IssueOps ์†Œ์Šค ์ฒดํฌ์•„์›ƒ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

git pull --ff-only
io update --dry-run --json
io update --json
io inspect --json

io update๋Š” ๋นŒ๋“œํ•  IssueOps ์ฒดํฌ์•„์›ƒ์„ ISSUEOPS_ROOT, ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์œ„๋กœ ์ฐพ์€ ์ฒดํฌ์•„์›ƒ, ์„ค์น˜๋œ ๋ช…๋ น์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฒดํฌ์•„์›ƒ ์ˆœ์œผ๋กœ ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ IssueOps ์ฒดํฌ์•„์›ƒ ์•ˆ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ์ฒดํฌ์•„์›ƒ์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. git pull์€ ๋Œ€์‹  ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. HTTP ์„ค์น˜์—์„œ๋Š” io update๊ฐ€ MCP ์„œ๋น„์Šค๋ฅผ ๋ฉˆ์ถ”๊ณ  ์ƒˆ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋‹ค์‹œ ๋„์šด ๋’ค build_id๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. MCP ๋ณ€๊ฒฝ์€ ํ˜ธ์ŠคํŠธ๊ฐ€ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•  ๋•Œ ์ ์šฉ๋˜๋ฏ€๋กœ, ์—…๋ฐ์ดํŠธ ํ›„์—๋„ ์˜› ๋„๊ตฌ๊ฐ€ ๋ณด์ด๋ฉด MCP๋ฅผ ์žฌ์—ฐ๊ฒฐํ•˜์„ธ์š”.

์ฒซ ๋ฆด๋ฆฌ์Šค๋Š” tarball/manual archive๋กœ ๋‚ด๊ณ , Homebrew๋Š” ์žฌํ˜„์„ฑ ๊ฒ€์ฆ๊ณผ ๋กค๋ฐฑ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•œ ๋’ค ๋„์ž…ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ๋ณต๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๋ฆด๋ฆฌ์Šค ์žฌํ˜„์„ฑ๊ณผ ๋กค๋ฐฑ ๊ธฐ์ค€์„ ๋”ฐ๋ฅด์„ธ์š”.

์ฒซ ์ž‘์—… ์‹œ์ž‘

1. ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ์— ์šด์˜ ๋ฌธ์„œ์™€ ๊ธฐ๋ก ์ €์žฅ์†Œ ์—ฐ๊ฒฐ

์ž‘์—…ํ•  ์ €์žฅ์†Œ๋กœ ์ด๋™ํ•œ ๋’ค ์ƒ์„ฑ ๊ณ„ํš์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

cd /path/to/your-project
io project bootstrap --repo . --dry-run --json
io project bootstrap --repo . --json
io project route-docs --repo . --task "fix login session expiry in auth middleware" --json

bootstrap์€ AGENTS.md์˜ ๋ฌธ์„œ ์•ˆ๋‚ด์™€ .issueops/ ๋ฌธ์„œ ๋ชจ์Œ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฌธ์„œ๋ฅผ ํ†ต์งธ๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ตœ์ดˆ ์ƒ์„ฑ์€ project-docs-bootstrap, ์ž‘์—… ์ค‘ ๊ฐฑ์‹ ์€ project-docs-update, ํฐ ๋ฌธ์„œ์˜ ๋ถ„๋ฆฌ๋Š” project-docs-optimize ์Šคํ‚ฌ์ด ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ AGENTS.md์™€ .issueops/๋ฅผ ์ปค๋ฐ‹ํ•ด์•ผ ํŒ€์›๋„ ๊ฐ™์€ ๋ฌธ์„œ์™€ ๊ธฐ๋ก์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

2. ์—์ด์ „ํŠธ์— ์ž‘์—… ์š”์ฒญ

์—์ด์ „ํŠธ์—๊ฒŒ issueops ์Šคํ‚ฌ์„ ์“ฐ๋ผ๊ณ  ํ•˜๋ฉด์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ, ์ œ์•ฝ, ์–ด๋””๊นŒ์ง€ ์ง„ํ–‰ํ• ์ง€๋ฅผ ์•Œ๋ ค ์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด:

issueops๋กœ ๋กœ๊ทธ์ธ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ด์ค˜. ๋งŒ๋ฃŒ๋œ ์„ธ์…˜์—์„œ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜. Draft PR์„ ๋งŒ๋“œ๋Š” ๋ฐ๊นŒ์ง€ ์ง„ํ–‰ํ•ด์ค˜.

ํ˜„์žฌ ๋‹จ๊ณ„๋Š” next๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ์ฝ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค.

io next --json
io list --repo "$PWD" --json

์‚ฌ์ดํด์ด ์—†์œผ๋ฉด next๊ฐ€ ์‹œ์ž‘ ๋ช…๋ น์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ์‹œ์ž‘ํ•˜๋ ค๋ฉด:

io start --repo "$PWD" --branch "123-fix-login" --json
io next --id "๋ฐ˜ํ™˜๋œ-ID" --json

next์˜ missing, next_command, exits๋ฅผ ๋”ฐ๋ผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. start --new๋Š” ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋ธŒ๋žœ์น˜ ์—†๋Š” ์ƒˆ ์‚ฌ์ดํด์„ ๋งŒ๋“ค๋ฏ€๋กœ, ์‘๋‹ต์ด ๋ถˆ๋ถ„๋ช…ํ•ด๋„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›๊ฒฉ ์ƒ์„ฑ ๊ฒฐ๊ณผ๊ฐ€ ๋ถˆ๋ถ„๋ช…ํ•  ๋•Œ๋„ ์žฌ์‹œ๋„ํ•˜์ง€ ๋ง๊ณ  remote reconcile-issueยทremote reconcile-child๋กœ ๊ธฐ์กด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

3. ๋‹จ๊ณ„๋ณ„๋กœ ์‹คํ–‰ยท๊ฒ€์ฆยท๋ฐœํ–‰

๋‹จ๊ณ„ ์Šคํ‚ฌ ๊ฒฐ๊ณผ
1. ์ด์Šˆ ํ™•์ •ยท์ƒ์„ฑ issueops-create-issue ์š”๊ตฌ์‚ฌํ•ญยท์™„๋ฃŒ ๊ธฐ์ค€์„ ๋‹ด์€ ์ด์Šˆ
2. ๋ธŒ๋žœ์น˜ ์ค€๋น„ issueops-prepare base SHA์™€ ์ด์Šˆ์— ์—ฐ๊ฒฐ๋œ ๋ธŒ๋žœ์น˜
3. ์•„ํ‚คํ…์ฒ˜ยท๊ณ„ํšยท๊ฒ€ํ† ยท์ธ๊ณ„ issueops-plan ๋…๋ฆฝ ๋ฆฌ๋ทฐ๋กœ ์Šน์ธํ•œ ์•„ํ‚คํ…์ฒ˜, ๊ด€๋ จ cautionยทADR์„ ๋ฐ˜์˜ํ•ด ๊ฒ€ํ† ํ•œ ๊ณ„ํš, ์‹คํ–‰ worktreeยท์„ธ์…˜
4. ๊ตฌํ˜„ issueops-implement ํ…Œ์ŠคํŠธ๋กœ ํ™•์ธํ•œ ๊ตฌํ˜„
5. AI slop ์ •๋ฆฌ issueops-slop-clean ๋ถˆํ•„์š”ํ•œ ๋ณ€๊ฒฝ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ด‰์ธํ•œ diff
6. ๋ฌธ์„œ ๋ฐ˜์˜ issueops-docs ํ˜„์žฌ ๊ตฌํ˜„๊ณผ ์ผ์น˜ํ•˜๋Š” ์šด์˜ ๋ฌธ์„œ, ์ด๋ฒˆ ์ž‘์—…์—์„œ ๋‚˜์˜จ cautionยทADR ๊ธฐ๋ก
7. ๊ฒ€์ฆ issueops-verify ์‹คํ–‰ ์ฆ๊ฑฐยท๋…๋ฆฝ ๋ฆฌ๋ทฐยท๋ฐœํ–‰ ์ค€๋น„ ํ™•์ธ
8. ์ปค๋ฐ‹ยทํ‘ธ์‹œ atomic-commit-push ๊ฒ€์ฆํ•œ ๋ณ€๊ฒฝ์˜ ์ปค๋ฐ‹๊ณผ ์›๊ฒฉ ๋ธŒ๋žœ์น˜
9. PR/MR ๋ฐœํ–‰ยท์™„๋ฃŒ issueops-create-pr, issueops-complete Draft PR/MR๊ณผ ์™„๋ฃŒ ์ฆ๊ฑฐ
10. ๋จธ์ง€ยท์ •๋ฆฌ issueops-merge, issueops-cleanup ๋จธ์ง€ํ•œ PR/MR๊ณผ ์—ฐ๊ฒฐ ์ด์Šˆยทworktreeยท๋ธŒ๋žœ์น˜ ์ •๋ฆฌ

์ด ํ‘œ๋Š” ์‚ฌ์šฉ์ž์šฉ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ์ €์žฅ ์ƒํƒœ์™€์˜ ๋Œ€์‘์€ ์‹คํ–‰ ๊ฐ€์ด๋“œ๊ฐ€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— ๋ณด๋ฅ˜ํ•˜๊ฑฐ๋‚˜ ํ๊ธฐํ•˜๋ ค๋ฉด issueops-abandon์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

release์ฒ˜๋Ÿผ ๊ณ„์† ์•ž์„œ ๋‚˜๊ฐ€๋Š” base ๋ธŒ๋žœ์น˜์—์„œ ๋”ด ์ž‘์—… ๋ธŒ๋žœ์น˜๋Š” sync-base ์Šคํ‚ฌ๋กœ ์ตœ์‹  ์ƒํƒœ์— ๋งž์ถฅ๋‹ˆ๋‹ค. ์ด ์Šคํ‚ฌ์€ ์ปค๋ฐ‹์ด ์ด๋ฏธ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ๋“ค์–ด๊ฐ”๋Š”์ง€, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ปค๋ฐ‹์ด๋‚˜ ๋ฆฌ๋ทฐ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด merge์™€ rebase ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๊ณ , ํŒ๋‹จํ•  ๊ทผ๊ฑฐ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด merge๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. IssueOps ์‚ฌ์ดํด์ด ์†Œ์œ ํ•œ ๋ธŒ๋žœ์น˜๋Š” ์ด ์Šคํ‚ฌ ๋Œ€์‹  issueops execution sync-base๋กœ base ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ๊ณผ ์„ธ์…˜ ์ธ๊ณ„

๊ตฌํ˜„์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์‹คํ–‰ ์„ธ์…˜์„ ์ž๋™์œผ๋กœ ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋žœ์น˜์™€ worktree๋ฅผ ์ค€๋น„ํ•œ ๋’ค Herdr๋ฅผ ํ™•์ธํ•˜๊ณ , Herdr ์„ธ์…˜์—์„œ ์ค€๋น„ ์ค‘์ด๋ฉฐ ์‹คํ–‰ ์ค‘์ธ ์„œ๋ฒ„์™€ ํ˜ธํ™˜์„ฑ, ํ˜„์žฌ ํ˜ธ์ŠคํŠธ์˜ ์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๊ฐ€ ํ™•์ธ๋˜๋ฉด ๊ฐ™์€ worktree์˜ ์ƒˆ Herdr ์„ธ์…˜์œผ๋กœ ์ธ๊ณ„ํ•ฉ๋‹ˆ๋‹ค. Herdr๋ฅผ ์“ธ ์ˆ˜ ์—†์œผ๋ฉด ํ˜„์žฌ ์„ธ์…˜์—์„œ ์ด์–ด ๊ฐ€๊ฑฐ๋‚˜, ์ง์ ‘ ์—ฐ ๋‘ ๋ฒˆ์งธ ํ„ฐ๋ฏธ๋„์—์„œ ์ˆ˜๋™์œผ๋กœ ์ธ๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋งŒ์œผ๋กœ Herdr๊ฐ€ ์ค€๋น„๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋Ÿฐ์ฒ˜๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. cmux๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ–ˆ์„ ๋•Œ๋งŒ ์”๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์„ธ์…˜ยท๋ณด๋ฅ˜ยท์ข…๋ฃŒ์ ์ด ์ด ์ž๋™ ์„ ํƒ๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

์—ญํ• ๋ณ„ modelยทeffort๋Š” ๋‹ค์„ฏ ํ˜ธ์ŠคํŠธ ๋ชจ๋‘ ์‚ฌ์šฉ์ž ์ „์ฒด(global)๋‚˜ ์ €์žฅ์†Œ ํ•˜๋‚˜(local) ๋‹จ์œ„๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ํ•„๋“œ๋งˆ๋‹ค ๋ช…์‹œ ํ”Œ๋ž˜๊ทธ > local > global > ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

issueops model show --json                                   # ํ˜„์žฌ ๊ฐ’๊ณผ ์ถœ์ฒ˜
issueops model set --scope local --host codex --role diff-review --effort xhigh --json
issueops model resolve --host claude --role research --json  # ์ตœ์ข… ๊ฐ’๊ณผ ๋นˆ ์ปจํ…์ŠคํŠธ ์‹คํ–‰ argv

ํ˜ธ์ŠคํŠธ๋ณ„ ๊ธฐ๋ณธ๊ฐ’ ํ‘œ, ์„ค์ • ํŒŒ์ผ ์œ„์น˜, ์„œ๋ธŒ์—์ด์ „ํŠธ ์—ญํ• ๊ณผ ๋ฆฌ๋ทฐ ๋ผ์šด๋“œ์— ๋”ฐ๋ฅธ ์ƒํ–ฅ ๊ทœ์น™์€ ์‹คํ–‰ ๊ฐ€์ด๋“œ์˜ ์—ญํ• ๋ณ„ ๋ชจ๋ธ ๊ธฐ๋ณธ๊ฐ’๊ณผ ์„ค์ •์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™”๋กœ ๋ฐ”๊พธ๋ ค๋ฉด io-model ์Šคํ‚ฌ์„ ์”๋‹ˆ๋‹ค.

์ž๋™ ์ธ๊ณ„ ๋ช…๋ น์€ Claude Code์— --dangerously-skip-permissions, Codex์— --dangerously-bypass-approvals-and-sandbox, Omo native์— --permission-preset full-access, omp์— --auto-approve๋ฅผ ์ „๋‹ฌํ•˜๊ณ , opencode๋Š” opencode --standalone --auto๋กœ ์—ฝ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ์˜ ๊ถŒํ•œ ํ™•์ธ์„ ์ƒ๋žตํ•˜๋Š” ์˜ต์…˜์ด๋ฏ€๋กœ ์ธ๊ณ„ํ•  ์ž‘์—… ๋ฒ”์œ„๋ฅผ ๋จผ์ € ์ •ํ•˜์„ธ์š”. IssueOps ์ž์ฒด์˜ ์‹คํ–‰ ๊ถŒํ•œยท์„ธ๋Œ€ยทworkspaceยท์›๊ฒฉ ์“ฐ๊ธฐ ๊ฒ€์‚ฌ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ธ๊ณ„ ๋ช…๋ น์˜ ์ˆ˜๋ฝ๊ณผ ์‹ค์ œ claimยท์ž‘์—… ์™„๋ฃŒ๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ฆ๊ฑฐ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜

Codex, Claude Code, Omo native, omp๊ฐ€ ํ•˜๋‚˜์˜ ๋กœ์ปฌ Go ์ฝ”์–ด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ตฌ์กฐ

flowchart LR
    Codex["Codex"] --> Host["์–‡์€ host adapter<br/>skills ยท hooks ยท MCP wiring"]
    Claude["Claude Code"] --> Host
    Omo["Omo native"] --> Host
    Omp["omp"] --> Host
    Opencode["opencode"] --> Host
    Shell["Human shell"] --> Surface["issueops<br/>CLI ยท ๊ณต์šฉ HTTP MCP ยท stdio MCP"]
    Host --> Surface
    Surface --> Core["Host-neutral Go core"]
    Core --> Policy["policy ยท guard ยท contracts"]
    Core --> Flow["IssueOps ยท loop"]
    Core --> State["SQLite user state ยท audit"]
    Core --> Worker["policy-gated worker"]
Loading

DDD ๊ด€์ ์—์„œ ์—…๋ฌด ๊ทœ์น™๊ณผ ์ƒํƒœ ์ „์ด๋Š” domain, ์‹คํ–‰ ์ˆœ์„œ์™€ ํŠธ๋žœ์žญ์…˜ ์กฐ์œจ์€ application์ด ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผยทDBยทGitยทํ”„๋กœ์„ธ์Šค ๊ฐ™์€ ๊ธฐ์ˆ  ๊ตฌํ˜„์€ adapter์— ๋‘๊ณ  composition root์—์„œ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๋กœ ์ฑ…์ž„
cmd/issueops/ ์˜์กด์„ฑ ์กฐ๋ฆฝ๊ณผ CLIยทMCPยทhook ์ง„์ž…์ 
internal/contract/ ๋ฒ„์ „์ด ์žˆ๋Š” DTO์™€ ์‘๋‹ตยท์ €์žฅ ๊ณ„์•ฝ
internal/domain/ I/O ์—†๋Š” ์—…๋ฌด ๊ทœ์น™ยท์ƒํƒœ ์ „์ดยทํŒ์ •
internal/application/ domainยทport๋ฅผ ์กฐํ•ฉํ•˜๋Š” ์‹คํ–‰ ํ๋ฆ„
internal/port/ ์™ธ๋ถ€ ๊ธฐ๋Šฅ์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์˜ค๋ฅ˜ ๊ณ„์•ฝ
internal/adapter/ ํ˜ธ์ŠคํŠธยทํŒŒ์ผยทDBยทGitยทํ”„๋กœ์„ธ์Šค ๊ตฌํ˜„
internal/architecture/ ๊ณ„์ธต ์˜์กด์„ฑยท์†Œ์œ ๊ถŒ ํšŒ๊ท€ ๊ฒ€์‚ฌ
skills/, configs/ ๊ณต์šฉ ์Šคํ‚ฌ ์›๋ณธ๊ณผ ํ˜ธ์ŠคํŠธ ์„ค์ • ํ…œํ”Œ๋ฆฟ
.issueops/ ์•„ํ‚คํ…์ฒ˜ยท์šด์˜ยท๊ฒ€์ฆยทADR ๋ฌธ์„œ

MCP๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋‹น ํ•˜๋‚˜๋งŒ ๋œจ๋Š” ๋กœ์ปฌ HTTP ์„œ๋น„์Šค์—์„œ ์‹คํ–‰๋˜๊ณ , stdio๋กœ ์„ค์น˜ํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ์„ธ์…˜ ์•ˆ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. hook์€ ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ ๋ฌธ๋งฅ์„ ์ œ๊ณตํ•˜๊ณ , ์ž‘์—… ์‹คํ–‰์ด๋‚˜ ๋‹จ๊ณ„ ํŒ์ •์„ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์—… ๋‹จ๊ณ„๋Š” next, ๋ณ€๊ฒฝ ํ—ˆ์šฉ ์—ฌ๋ถ€๋Š” CLI ๊ฒŒ์ดํŠธ๊ฐ€ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ธ ๊ฒฝ๊ณ„๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์•ˆ์ „ ๊ฒฝ๊ณ„

  • ์›๊ฒฉ ์“ฐ๊ธฐ๋Š” ๋ช…์‹œ์  ์Šน์ธ๊ณผ ํ•ด๋‹น ๋ช…๋ น์˜ fingerprintยทactor ๊ณ„์•ฝ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • ๋ช…๋ น ์‹คํ–‰์—๋Š” workspaceยทcwd ๊ฒฝ๊ณ„, ์“ฐ๊ธฐยท๋„คํŠธ์›Œํฌ ์˜๋„, timeout๊ณผ secret redaction์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • MCP ๋„๊ตฌ ์ธ์ž๋Š” ๊ณต๊ฐœ ์Šคํ‚ค๋งˆ๋กœ ๊ฒ€์ฆํ•˜๋ฉฐ, ๋ชจ๋ฅด๋Š” ํ•„๋“œ๋‚˜ ๋น ์ง€๊ฑฐ๋‚˜ ํƒ€์ž…์ด ํ‹€๋ฆฐ ํ•„๋“œ๋Š” ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
  • secret ์›๋ฌธ์€ ๋ฌธ์„œ, ์ƒํƒœ ์‘๋‹ต, ๊ฐ์‚ฌ ๋กœ๊ทธ, ํ…Œ์ŠคํŠธ fixture์— ๋‚จ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ๋„๊ตฌ์˜ ์„ค์น˜๋‚˜ ์ธ์ฆ์€ ํ•ด๋‹น ๋„๊ตฌ์˜ ๊ณต์‹ ์ ˆ์ฐจ๋กœ ๋ณ„๋„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. Herdr ๊ฐ™์€ ์—ฐ๋™์€ ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ, ๊ธฐ๋ณธ ์„ค์น˜ยท์ค€๋น„ ์ƒํƒœ ํ™•์ธยท์ž๊ธฐ ๊ฒ€์ฆ์€ ์™ธ๋ถ€ ๋„๊ตฌ๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒ€์ฆ๊ณผ ์ผ์ƒ ์ง„๋‹จ

io status --json
io doctor --repo . --json
io docs --json
io contract check --json

ํ•˜๋„ค์Šค ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด ๊ฒ€์ฆ ๊ธฐ์ค€์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ์ž๊ธฐ ๊ฒ€์ฆ์˜ ์ง„ํ–‰ ์ƒํ™ฉ์€ --progress=jsonl๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

io self-verify --seed=100 --target-score=95 --llm-eval=false --progress=jsonl --json
io quality inspect --json

self-verify๋Š” ํ…Œ์ŠคํŠธยท๋นŒ๋“œยทCLI/MCPยท์„ค์น˜ยท๋™์‹œ์„ฑ ๋“ฑ ๊ฒ€์ฆ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. quality inspect๋Š” ์ปค๋ฒ„๋ฆฌ์ง€์™€ ๋ณต์žก๋„ ๋“ฑ ๊ฐœ์„  ํ›„๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฉฐ, ์บ์‹œ๊ฐ€ ์—†์œผ๋ฉด ์ „์ฒด Go ์ปค๋ฒ„๋ฆฌ์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ง‘ ์„ฑ๊ณต(collection_status), ๊ด€์ฐฐ๋œ ์ƒํƒœ (health_status), ์ฐจ๋‹จ ์—ฌ๋ถ€(gate_status)๋ฅผ ๊ตฌ๋ถ„ํ•ด ์ฝ์œผ์„ธ์š”.

์ „์ฒด ๋ช…๋ น๊ณผ ๊ณต๊ฐœ ๋„๊ตฌ ๊ณ„์•ฝ์€ io --help, io contract schema --json์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ฌ๋ณ„ ์ ˆ์ฐจ๋Š” skills/์˜ ๊ฐ SKILL.md๊ฐ€ ์ •๊ทœ ์›๋ณธ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ

์ฆ์ƒ ํ™•์ธํ•  ๋‚ด์šฉ
์„ค์น˜ ํ›„ io๋ฅผ ์ฐพ์ง€ ๋ชปํ•จ ์ƒˆ ์…ธ์„ ์—ด๊ณ  ~/.local/bin์ด PATH์— ์žˆ๋Š”์ง€ ํ™•์ธ
๊ธฐ์กด ๋ช…๋ น ํŒŒ์ผ ๋•Œ๋ฌธ์— ์„ค์น˜ ๊ฑฐ๋ถ€ --dry-run --json์—์„œ ์ถฉ๋Œ ๊ฒฝ๋กœ ํ™•์ธ. ๊ธฐ์กด ํŒŒ์ผ์€ ์ž๋™์œผ๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Œ
์—…๋ฐ์ดํŠธ ํ›„์—๋„ ์˜› MCP ๋„๊ตฌ๊ฐ€ ๋ณด์ž„ ํ˜ธ์ŠคํŠธ MCP ์žฌ์—ฐ๊ฒฐ ํ›„ io inspect --json ํ™•์ธ
๋‹จ๊ณ„๊ฐ€ ๋ง‰ํ˜”๊ฑฐ๋‚˜ ๋‹ค์Œ ์ž‘์—…์ด ๋ถˆ๋ถ„๋ช…ํ•จ io next --id <ID> --json์˜ missingยทnext_command ํ™•์ธ
๋ฌธ์„œ ํŒ์ • ํ›„ ์ด์ „ ๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ diff ๋ณ€๊ฒฝ์œผ๋กœ fingerprint๊ฐ€ ๋‹ฌ๋ผ์กŒ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋ฌธ์„œ ๊ฒ€ํ† ยท์žฌ๋ด‰์ธ
์ธ๊ณ„ ๋ชจ๋ธ์ด๋‚˜ effort๊ฐ€ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฆ„ io model show --json์˜ ๊ฐ’๊ณผ ์ถœ์ฒ˜, ๋ช…์‹œํ•œ ์ง€์ •๊ฐ’, ๋ฆฌ๋ทฐ ๋ผ์šด๋“œ ํ™•์ธ
self-verify๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆผ --progress=jsonl๋กœ ์‹คํ–‰ ์ค‘์ธ ๋‹จ๊ณ„ ํ™•์ธ
์„ค์น˜ยท์ƒํƒœ ์ €์žฅ์†Œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ io doctor --repo . --json๋กœ ํ•ญ๋ชฉ๋ณ„ ์ง„๋‹จ

๋” ์•Œ์•„๋ณด๊ธฐ

๋ฌธ์„œ ์šฉ๋„
AGENTS.md ์ €์žฅ์†Œ ์ž‘์—… ๊ทœ์น™๊ณผ ๊ฒ€์ฆ ์šฐ์„ ์ˆœ์œ„
์šด์˜ ๊ฐ€์ด๋“œ ์„ค์น˜ยทํ˜ธ์ŠคํŠธยทCLI/MCPยท์ƒํƒœ ์šด์˜
์‹คํ–‰ ๊ฐ€์ด๋“œ ์‚ฌ์ดํดยท์‹คํ–‰ ๊ถŒํ•œยท์ธ๊ณ„ยท๋ณต๊ตฌยท์—ญํ• ๋ณ„ ๋ชจ๋ธ
์•„ํ‚คํ…์ฒ˜ ๊ณ„์ธต๋ณ„ ์ฑ…์ž„๊ณผ ์˜์กด ๋ฐฉํ–ฅ
์ž‘์—… ํ๋ฆ„ ์—์ด์ „ํŠธ์˜ ์‹œ์ž‘ยท๊ฒ€์ฆยท์™„๋ฃŒ ์ ˆ์ฐจ
ํ…Œ์ŠคํŠธ ๊ธฐ์ค€ ๋ณ€๊ฒฝ ์ข…๋ฅ˜๋ณ„ ๊ฒ€์ฆ๊ณผ ์™„๋ฃŒ ์กฐ๊ฑด
์„ค๊ณ„ ๊ฒฐ์ • ์ฑ„ํƒํ•œ ๊ฒฐ์ •๊ณผ ๊ทผ๊ฑฐ
๋ฆด๋ฆฌ์Šคยท๋กค๋ฐฑ ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ ๊ฒ€์ฆ๊ณผ ์„ค์น˜ ๋ณต๊ตฌ

๋ผ์ด์„ ์Šค

MIT. LICENSE.

About

IssueOps: issue-driven agent workflows for Codex, Claude Code, and Omo

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages