Skip to content

hongdangmoo49/Trinity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

77 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

โ—ฏ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ—ฏ

๐Ÿง  T R I N I T Y

โ—ฏ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ—ฏ

์„ธ ๊ฐœ์˜ ๋‘๋‡Œ, ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ.

Claude Code ยท Codex ยท Gemini CLI ์„ธ AI ์—์ด์ „ํŠธ๋ฅผ ๊ณต์œ  ์ปจํ…์ŠคํŠธ, ๋ผ์šด๋“œ ๊ธฐ๋ฐ˜ ํ† ๋ก , ์ง€๋Šฅํ˜• ์ž‘์—… ๋ถ„๋ฐฐ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ AI ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ.

License PyPI Python Tests

English ยท ๋น ๋ฅธ ์‹œ์ž‘ ยท ์™œ Trinity์ธ๊ฐ€ ยท ์ž‘๋™ ์›๋ฆฌ ยท TUI ยท ๋ช…๋ น์–ด ยท ์•„ํ‚คํ…์ฒ˜


Trinity๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์—ญํ• ์„ ๊ฐ€์ง„ ์„ธ ๊ฐ€์ง€ AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ•๋ ฅํ•œ ํ˜‘์—… ์ง€๋Šฅ์œผ๋กœ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋‹จ ํ•˜๋‚˜์˜ AI์—๊ฒŒ ๋ชจ๋“  ์ž‘์—…์„ ์ผ์ž„ํ•˜๋Š” ๊ธฐ์กด ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜, Trinity๋Š” Claude(์„ค๊ณ„์ž), Codex(๊ตฌํ˜„์ž), Gemini(๊ฒ€ํ† ์ž) ๊ฐ„์˜ ๊ตฌ์กฐํ™”๋œ ํ† ๋ก ๊ณผ ํ•ฉ์˜๋ฅผ ์ง€๋Šฅ์ ์œผ๋กœ ์กฐ์œจํ•ฉ๋‹ˆ๋‹ค. ์„ธ ์—์ด์ „ํŠธ๋Š” ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ๋ผ์šด๋“œ๋ณ„๋กœ ์˜๊ฒฌ์„ ๋‚˜๋ˆ„๊ณ , ์ตœ์ข… ํ•ฉ์˜์— ๋„๋‹ฌํ•˜๋ฉด ๊ฐ์ž์˜ ํŠนํ™” ๋ถ„์•ผ์— ๋งž๊ฒŒ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ๋ถ„๋ฐฐํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


โ“ ์™œ Trinity์ธ๊ฐ€

๋‹จ์ผ ์—์ด์ „ํŠธ AI๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ์น˜๋ช…์ ์ธ ๋งน์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ์œ ํ˜• ๋‹จ์ผ AI ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ Trinity์˜ ํ•ด๊ฒฐ ๋ฐฉ์‹
ํ„ฐ๋„ ๋น„์ „ (์‹œ์•ผ ํ˜‘์ฐฉ) ํ•˜๋‚˜์˜ AI๊ฐ€ ์˜ค์ง ํ•œ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์—๋งŒ ๊ฐ‡ํ˜€ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์„ธ ์—์ด์ „ํŠธ๊ฐ€ ์ตœ์ข… ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ธฐ ์ „์— ๋‹ค๊ฐ๋„์—์„œ ๋Œ€์•ˆ์„ ํ† ๋ก ํ•ฉ๋‹ˆ๋‹ค.
ํ”ผ์–ด ๋ฆฌ๋ทฐ(Peer Review) ๋ถ€์žฌ ์„ค๊ณ„์ƒ ๊ฒฐํ•จ์ด๋‚˜ ์ž ์žฌ์  ๋ฒ„๊ทธ๊ฐ€ ๊ฒ€์ฆ ์—†์ด ๋ฐ”๋กœ ํ†ต๊ณผ๋˜์–ด ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. Gemini๊ฐ€ Claude์˜ ์ดˆ๊ธฐ ์„ค๊ณ„์•ˆ์„ ์ •๋ฐ€ํ•˜๊ฒŒ ๊ฒ€ํ† ํ•˜๊ณ  ๋ณด์™„์ฑ…์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.
์ปจํ…์ŠคํŠธ ๋‹จ์ ˆ (์œ ์‹ค) ๊ฐ ์—์ด์ „ํŠธ๊ฐ€ ์„œ๋กœ ๋ถ„๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ๊ณ ๋ฆฝ๋˜์–ด ์ž‘์—…ํ•ด ๋™๊ธฐํ™”๊ฐ€ ๊นจ์ง‘๋‹ˆ๋‹ค. ๋‹จ์ผ ๊ณต์œ  ์ปจํ…์ŠคํŠธ ํŒŒ์ผ์„ ํ†ตํ•ด ๋ชจ๋“  ์—์ด์ „ํŠธ๊ฐ€ ์ผ๊ด€๋œ ๊ฐœ๋ฐœ ๋งฅ๋ฝ์„ ์‹ค์‹œ๊ฐ„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ผ๊ด€๋˜์ง€ ๋ชปํ•œ ํ’ˆ์งˆ ๊ฒฐ๊ณผ๋ฌผ์˜ ์™„์„ฑ๋„๊ฐ€ ๋‹จ์ผ ๋ชจ๋ธ์˜ ํ•œ๊ณ„๋‚˜ ์ปจ๋””์…˜์— ์ „์ ์œผ๋กœ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ˆ˜๊ฒฐ ํ•ฉ์˜(Consensus) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋„์ž…ํ•˜์—ฌ ์ƒํ˜ธ ๊ต์ฐจ ๊ฒ€์ฆ๋œ ํ’ˆ์งˆ๋งŒ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜๋™ ์ž‘์—… ์œ„์ž„ ์–ด๋–ค ์—์ด์ „ํŠธ์—๊ฒŒ ์–ด๋–ค ํ•˜์œ„ ์ž‘์—…์„ ๋งก๊ธธ์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งค๋ฒˆ ์ง์ ‘ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์—์ด์ „ํŠธ์˜ ๊ฐ•์ ๊ณผ ์—ญํ• ์— ๋งž์ถฐ ํ•˜์œ„ ์ž‘์—…์ด ์‹œ์Šคํ…œ์ ์œผ๋กœ ์ž๋™ ๋ถ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค.

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

์„ค์น˜ํ•˜๊ธฐ

pip install trinity-agent

ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”

# ๋Œ€ํ™”ํ˜• ์„ค์ • ๋งˆ๋ฒ•์‚ฌ ์‹คํ–‰ โ€” ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ AI CLI๋ฅผ ์ž๋™์œผ๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค
trinity init

# ๋น„๋Œ€ํ™”ํ˜• ์‹คํ–‰ (๊ธฐ๋ณธ ์„ค์ •๊ฐ’ ์ ์šฉ)
trinity init --non-interactive

์ฒซ ๋ฒˆ์งธ ํ† ๋ก (Deliberation) ์‹คํ–‰

# ๋‹จ๋ฐœ์„ฑ(One-shot) ์งˆ์˜ ์‹คํ–‰
trinity ask "์ธ์ฆ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•ด์ค˜"

# ๋Œ€ํ™”ํ˜• TUI ๋ชจ๋“œ ์‹คํ–‰ (์—์ด์ „ํŠธ ๊ฐ„ ์‹ค์‹œ๊ฐ„ ํ† ๋ก  ๊ด€์ „ ๋ฐ ์ฐธ์—ฌ)
trinity

Trinity๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ๐Ÿ” ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ AI CLI ์ž๋™ ํƒ์ƒ‰ (Claude Code, Codex, Gemini CLI ๋“ฑ)
  2. ๐Ÿง  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—์ด์ „ํŠธ๋“ค์„ ์†Œ์ง‘ํ•˜์—ฌ ๋ผ์šด๋“œ ๊ธฐ๋ฐ˜์˜ ์‹ฌ์ธต ํ† ๋ก (Deliberation) ์‹œ์ž‘
  3. ๐Ÿ“Š ์—์ด์ „ํŠธ ๊ฐ„์˜ ํ•ฉ์˜ ๋„์ถœ ๊ณผ์ •, ์ž‘์—… ๋ถ„๋ฐฐ ๊ฒฐ๊ณผ, ์ถ”๋ก  ๊ณผ์ •์„ ์•„๋ฆ„๋‹ค์šด TUI๋กœ ์‹œ๊ฐํ™”

๐Ÿ” ์ž‘๋™ ์›๋ฆฌ

  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚   ๐Ÿ—๏ธ Claude   โ”‚     โ”‚   โš™๏ธ Codex    โ”‚     โ”‚   ๐Ÿ” Gemini   โ”‚
  โ”‚    (์„ค๊ณ„์ž)   โ”‚     โ”‚    (๊ตฌํ˜„์ž)   โ”‚     โ”‚    (๊ฒ€ํ† ์ž)   โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
          โ”‚                     โ”‚                     โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                โ”‚
                       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                       โ”‚  ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ โ”‚
                       โ”‚  ๊ณต์œ  ์ปจํ…์ŠคํŠธ  โ”‚
                       โ”‚    ํ•ฉ์˜ ์—”์ง„    โ”‚
                       โ”‚   ์ž‘์—… ๋ถ„๋ฐฐ๊ธฐ   โ”‚
                       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ํ† ๋ก  ํ๋ฆ„ (Deliberation Flow)

๋‹จ๊ณ„ ์ˆ˜ํ–‰ ํ•ญ๋ชฉ ๋ฐ ๋™์ž‘ ์„ค๋ช…
์ดˆ๊ธฐํ™” (Initialize) ์ตœ์ข… ๋ชฉํ‘œ์™€ ์ฐธ๊ฐ€ ์—์ด์ „ํŠธ ๋ชฉ๋ก์„ ๋‹ด์€ ๊ณต์œ  ์ปจํ…์ŠคํŠธ ํŒŒ์ผ(shared.md)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
1๋ผ์šด๋“œ (Round 1) ๊ฐ ์—์ด์ „ํŠธ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ถ„์„ํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์˜๊ฒฌ ๋ฐ ์„ค๊ณ„์•ˆ์„ ๊ณต์œ  ์ปจํ…์ŠคํŠธ์— ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.
2๋ผ์šด๋“œ ์ด์ƒ (Round 2+) ๋‹ค๋ฅธ ์—์ด์ „ํŠธ๋“ค์˜ ์ œ์•ˆ์„ ์ƒํ˜ธ ๊ฒ€ํ† ํ•˜์—ฌ ๋™์˜/๋น„๋™์˜๋ฅผ ํ‘œ๋ช…ํ•˜๊ณ , ํ•„์š” ์‹œ ๋” ๋‚˜์€ ๋Œ€์•ˆ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
ํ•ฉ์˜ ๋„๋‹ฌ (Consensus) ์ „์ฒด ์—์ด์ „ํŠธ ์ค‘ 60% ์ด์ƒ์ด ๋™์˜ํ•˜๋Š” ์‹œ์ ์— ์ตœ์ข… ํ•ฉ์˜์•ˆ์„ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
์ž‘์—… ๋ถ„๋ฐฐ (Distribute) ํ™•์ •๋œ ์ž‘์—…๋“ค์„ ๊ฐ ์—์ด์ „ํŠธ์˜ **ํŠนํ™”๋œ ๋ถ„์•ผ(๊ฐ•์ )**์— ๋งž์ถฐ ์ž๋™์œผ๋กœ ํ• ๋‹นํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ๋ณ„ ํŠน๊ธฐ ๋ถ„์•ผ(๊ฐ•์ )

์—์ด์ „ํŠธ ์ง€์ • ์—ญํ•  ์ฃผ์š” ์ž‘์—… ๋ฐ ๊ฐ•์  ๋ถ„์•ผ
๐Ÿ—๏ธ Claude ์„ค๊ณ„์ž (Architect) ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„, ์„ค๊ณ„ ๊ฒ€ํ† (์ฝ”๋“œ ๋ฆฌ๋ทฐ), ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์„ค๊ณ„, ๊ฐœ๋ฐœ ๊ธฐํš
โš™๏ธ Codex ๊ตฌํ˜„์ž (Implementer) ์‹ค์ œ ์ฝ”๋“œ ๊ตฌํ˜„ ๋ฐ ํ”„๋กœํ† ํƒ€์ดํ•‘, ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
๐Ÿ” Gemini ๊ฒ€ํ† ์ž (Reviewer) ์ฝ”๋“œ ๋™์ž‘ ๊ฒ€์ฆ, ๊ธฐ์ˆ  ์Šคํƒ ์—ฐ๊ตฌ, ๋Œ€์•ˆ ํƒ์ƒ‰, ๊ฒฝ๊ณ„ ์กฐ๊ฑด(Edge Case) ๋ถ„์„, ํ’ˆ์งˆ ๋ณด์ฆ(QA)

๐Ÿ’ฌ ๋Œ€ํ™”ํ˜• TUI

Trinity๋Š” **Rich ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฏธ๋ คํ•œ ํ„ฐ๋ฏธ๋„ UI(TUI)**๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ์—์ด์ „ํŠธ ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ํ† ๋ก  ๊ณผ์ •์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  ๐Ÿง  Trinity v0.3.0  โ€”  ์„ธ ๊ฐœ์˜ ๋‘๋‡Œ, ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ

  ๐Ÿ—๏ธ claude โœ…    โš™๏ธ codex โœ…    ๐Ÿ” gemini โœ…

  ๐Ÿ“Š ์—์ด์ „ํŠธ ์ƒํƒœ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚  ๐Ÿ—๏ธ claude    ์„ค๊ณ„์ž      โœ… ์‘๋‹ต ์™„๋ฃŒ     12%    pytest ์ถ”์ฒœ... โ”‚
  โ”‚  โš™๏ธ codex     ๊ตฌํ˜„์ž      โœ… ์‘๋‹ต ์™„๋ฃŒ      8%    ๋™์˜ํ•จ...      โ”‚
  โ”‚  ๐Ÿ” gemini    ๊ฒ€ํ† ์ž      โœ… ์‘๋‹ต ์™„๋ฃŒ     15%    ๋Œ€์•ˆ ์ œ์‹œ...   โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

  ๐Ÿ’ฌ ํ† ๋ก  ์ง„ํ–‰ ํ˜„ํ™ฉ
  โ”€โ”€โ”€ 1๋ผ์šด๋“œ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    โœ… claude (์„ค๊ณ„์ž)
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  ์ธ์ฆ ์‹œ์Šคํ…œ์€ JWT(RS256) ๋ฐฉ์‹์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋“ค์›จ์–ด     โ”‚
    โ”‚  ํŒจํ„ด์œผ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๋ฉด ํ™•์žฅ์„ฑ์— ๋งค์šฐ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค...  โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

    โœ… codex (๊ตฌํ˜„์ž)
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Claude์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ        โ”‚
    โ”‚  ํšŒ์ „(Rotation)์„ ์ถ”๊ฐ€ ๊ตฌํ˜„ํ•˜๋ฉด ๋ณด์•ˆ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜...   โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

    โœ… gemini (๊ฒ€ํ† ์ž)
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  OAuth 2.0๋„ ๋Œ€์•ˆ์œผ๋กœ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”. ํ† ํฐ ํšŒ์ „ ์•„์ด๋””์–ด๋Š”โ”‚
    โ”‚  ํ›Œ๋ฅญํ•˜์ง€๋งŒ, ์˜ˆ์™ธ ์ƒํ™ฉ(Edge Case)์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”...  โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

    ๐Ÿ” ํ•ฉ์˜ ํ‰๊ฐ€ ์ค‘...  2/3 ๋™์˜ (67%)

  ๐Ÿ’ฌ trinity>

TUI ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ โ€” ๋ชจ๋“  ์—์ด์ „ํŠธ๊ฐ€ ๋‹ต๋ณ€์„ ๋งˆ์น  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถœ๋ ฅ์ด ๋„์ฐฉํ•˜๋Š” ์ฆ‰์‹œ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
  • ์—์ด์ „ํŠธ๋ณ„ ์ „์šฉ ํ…Œ๋งˆ โ€” ์—์ด์ „ํŠธ๋ณ„ ๊ณ ์œ ์˜ ํ…Œ๋งˆ ์ƒ‰์ƒ์„ ์ ์šฉํ•ด ์‹œ์ธ์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค. [Claude(์ฒญ๋ก์ƒ‰/Cyan), Codex(์ดˆ๋ก์ƒ‰/Green), Gemini(์ž์ฃผ์ƒ‰/Magenta)]
  • ๋งˆํฌ๋‹ค์šด(Markdown) ์‹ค์‹œ๊ฐ„ ๋ Œ๋”๋ง โ€” ์—์ด์ „ํŠธ๋“ค์˜ ๋‹ต๋ณ€์— ํฌํ•จ๋œ ๊ฐ์ข… ์„œ์‹๊ณผ ์ฝ”๋“œ ๊ตฌ๋ฌธ ๊ฐ•์กฐ(Syntax Highlighting)๋ฅผ ํ„ฐ๋ฏธ๋„์— ๋ฏธ๋ คํ•˜๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ฉ์˜ ์ง„ํ–‰๋ฅ  ๊ฒŒ์ด์ง€ ๋ฐ” โ€” ์—์ด์ „ํŠธ ๊ฐ„์˜ ๋™์˜ ๋ฐ ํ•ฉ์˜ ๋„๋‹ฌ ๋น„์ค‘์„ ์‹œ๊ฐ์ ์ธ ๊ฒŒ์ด์ง€๋กœ ์‹ค์‹œ๊ฐ„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜ ์ž‘์—… ๋ถ„๋ฐฐ โ€” ์ตœ์ข… ํ•ฉ์˜ ํ›„ ๊ฐ๊ฐ ์–ด๋–ค ์—์ด์ „ํŠธ๊ฐ€ ์–ด๋–ค ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•œ ๊ณ„์ธตํ˜• ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‹ ๋ช…๋ น์–ด

CLI ๋ช…๋ น์–ด

๋ช…๋ น์–ด ์„ค๋ช…
trinity ๋Œ€ํ™”ํ˜• TUI ์„ธ์…˜ ์‹คํ–‰
trinity init ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— Trinity ์ž‘์—… ๊ณต๊ฐ„(.trinity/) ์ดˆ๊ธฐํ™”
trinity init --non-interactive ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์š”์ฒญ ์—†์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ฆ‰์‹œ ์ดˆ๊ธฐํ™”
trinity ask "์งˆ๋ฌธ" ์ž…๋ ฅํ•œ ํ”„๋กฌํ”„ํŠธ์— ๋Œ€ํ•ด ์ฆ‰์‹œ ๋‹จ๋ฐœ์„ฑ(One-shot) ํ† ๋ก  ์‹คํ–‰
trinity status ํ˜„์žฌ ์—์ด์ „ํŠธ๋“ค์˜ ํ™œ์„ฑํ™” ๋ฐ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ‘œ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ
trinity status-watch ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒํƒœ๊ฐ€ ๊ฐฑ์‹ ๋˜๋Š” ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ ๋Œ€์‹œ๋ณด๋“œ ์‹คํ–‰
trinity context ๊ณต์œ  ์ปจํ…์ŠคํŠธ(shared.md) ํŒŒ์ผ ๋‚ด์šฉ ํ™•์ธ
trinity config [ํ‚ค] ์ง€์ •ํ•œ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ํ™˜๊ฒฝ ์„ค์ •๊ฐ’ ์กฐํšŒ
trinity logs ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ์˜ ์„ธ๋ถ€ ๋™์ž‘ ๋กœ๊ทธ ํ™•์ธ
trinity reset --keep-context ํ˜„์žฌ ์„ธ์…˜ ์ •๋ณด๋Š” ์ดˆ๊ธฐํ™”ํ•˜๋˜, ๊ธฐ์กด ๊ณต์œ  ์ปจํ…์ŠคํŠธ ํŒŒ์ผ์€ ๋ณด์กด
trinity attach ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ tmux ์—์ด์ „ํŠธ ์„ธ์…˜์— ๋‹ค์‹œ ์—ฐ๊ฒฐ(Attach)

TUI ์ธ๋ผ์ธ ๋ช…๋ น์–ด

๋Œ€ํ™”ํ˜• TUI ๋‚ด๋ถ€ ๋ช…๋ น (์ธ์ž ์—†์ด trinity ์‹คํ–‰ ํ›„ ํ”„๋กฌํ”„ํŠธ ์ƒ์—์„œ ์ž…๋ ฅ):

๋ช…๋ น์–ด ์„ค๋ช…
<ํ…์ŠคํŠธ> ์—์ด์ „ํŠธ๋“ค์—๊ฒŒ ์ƒˆ๋กœ์šด ์ฃผ์ œ๋กœ ํ† ๋ก (Deliberation) ์‹œ์ž‘ ์š”์ฒญ
/status ์—์ด์ „ํŠธ๋ณ„ ์ƒ์„ธ ์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ ํ‘œ์‹œ
/context ํ˜„์žฌ์˜ ๊ณต์œ  ์ปจํ…์ŠคํŠธ ๋‚ด์šฉ ํ™•์ธ
/rounds [N] ํ† ๋ก ์„ ์ง„ํ–‰ํ•  ์ตœ๋Œ€ ๋ผ์šด๋“œ ํšŸ์ˆ˜ ์„ค์ • (1โ€“20 ๋ฒ”์œ„)
/agent <์ด๋ฆ„> on|off ํŠน์ • ์—์ด์ „ํŠธ๋ฅผ ์ฆ‰์‹œ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”
/history ์ด์ „ ๋ผ์šด๋“œ์˜ ํ† ๋ก  ํžˆ์Šคํ† ๋ฆฌ ์š”์•ฝ ์กฐํšŒ
/save ํ˜„์žฌ ํ† ๋ก  ์„ธ์…˜์˜ ์ „์ฒด ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ๋กœ ์˜๊ตฌ ์ €์žฅ
/help ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ๋ผ์ธ ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ
/quit Trinity ์ข…๋ฃŒ ๋ฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ

โš™๏ธ ์„ค์ •

.trinity/trinity.config ํŽธ์ง‘ (TOML ํ˜•์‹):

[general]
session_name = "trinity"
state_dir = ".trinity"
max_deliberation_rounds = 5
consensus_threshold = 0.6

[deliberation]
max_rounds = 5
consensus_threshold = 0.6
round_timeout_seconds = 120

[context]
rotate_threshold = 0.6
keep_sections = ["Current Goal", "Agreed Conclusion"]
recent_rounds_on_rotate = 3

[agents.claude]
provider = "claude-code"
cli_command = "claude"
role_prompt = "You are the Architect. You design systems, review code..."
enabled = true
extra_args = ["--dangerously-skip-permissions"]

[agents.codex]
provider = "codex"
cli_command = "codex"
role_prompt = "You are the Implementer. You write clean, efficient code..."
enabled = false                    # ๊ธฐ๋ณธ๊ฐ’์€ ๋น„ํ™œ์„ฑํ™”

[agents.gemini]
provider = "gemini-cli"
cli_command = "gemini"
role_prompt = "You are the Reviewer. You explore alternatives..."
enabled = false                    # ๊ธฐ๋ณธ๊ฐ’์€ ๋น„ํ™œ์„ฑํ™”

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

trinity/
โ”œโ”€โ”€ orchestrator.py         # ์ตœ์ƒ์œ„ ์กฐ์ •์ž(Coordinator) โ€” ๋ชจ๋“  ํ•˜์œ„ ์‹œ์Šคํ…œ ์ œ์–ด ๋ฐ ์†Œ์œ 
โ”œโ”€โ”€ cli.py                  # Click ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋ฐ˜ CLI ์ง„์ž…์ 
โ”œโ”€โ”€ config.py               # TOML ์„ค์ • ๋กœ๋” ๋ฐ ํŒŒ์„œ (๊ธฐ๋ณธ๊ฐ’ ๊ตฌ์„ฑ ์ •๋ณด ํฌํ•จ)
โ”œโ”€โ”€ models.py               # ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์ •์˜ (AgentSpec, DeliberationMessage ๋“ฑ)
โ”‚
โ”œโ”€โ”€ agents/                 # ์ œ๊ณต์ž๋ณ„ AI ์—์ด์ „ํŠธ ์–ด๋Œ‘ํ„ฐ
โ”‚   โ”œโ”€โ”€ base.py             #   AgentWrapper ์ถ”์ƒ ๋ฒ ์ด์Šค ํด๋ž˜์Šค (ABC)
โ”‚   โ”œโ”€โ”€ claude_agent.py     #   Claude Code ์—ฐ๋™ (์ถœ๋ ฅ ๋ชจ๋“œ + tmux ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ)
โ”‚   โ”œโ”€โ”€ codex_agent.py      #   Codex ์—ฐ๋™ (์ถœ๋ ฅ ๋ชจ๋“œ + tmux ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ)
โ”‚   โ”œโ”€โ”€ gemini_agent.py     #   Gemini CLI ์—ฐ๋™ (์ถœ๋ ฅ ๋ชจ๋“œ + tmux ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ)
โ”‚   โ””โ”€โ”€ factory.py          #   AgentFactory โ€” ์—์ด์ „ํŠธ ์ธ์Šคํ„ด์Šค ๋™์  ์ƒ์„ฑ
โ”‚
โ”œโ”€โ”€ deliberation/           # ํ† ๋ก  ํ•ต์‹ฌ ์—”์ง„
โ”‚   โ”œโ”€โ”€ protocol.py         #   ๋ผ์šด๋“œ ๊ธฐ๋ฐ˜ ํ† ๋ก  ํ”„๋กœํ† ์ฝœ ๋ฃจํ”„ ๋ฐ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ
โ”‚   โ”œโ”€โ”€ consensus.py        #   ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ํ•ฉ์˜ ๊ฐ์ง€ ๋ฐ ๋ถ€์ •์–ด ํ•„ํ„ฐ๋ง
โ”‚   โ””โ”€โ”€ distributor.py      #   ์ตœ์ข… ํ•ฉ์˜์•ˆ ๋„์ถœ ํ›„ ์—์ด์ „ํŠธ ๊ฐ•์ ๋ณ„ ์ž‘์—… ๋ถ„๋ฐฐ
โ”‚
โ”œโ”€โ”€ context/                # ๊ณต์œ  ๋‘๋‡Œ (Shared Context)
โ”‚   โ”œโ”€โ”€ shared.py           #   SharedContextEngine โ€” shared.md ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ monitor.py          #   ๊ฐ ์—์ด์ „ํŠธ๋ณ„ ํ† ํฐ ์‚ฌ์šฉ ํ˜„ํ™ฉ ๋ชจ๋‹ˆํ„ฐ๋ง
โ”‚   โ””โ”€โ”€ rotator.py          #   ์ปจํ…์ŠคํŠธ ์šฉ๋Ÿ‰ ์ดˆ๊ณผ ์‹œ ์„ธ์…˜ ์ •๋ณด ์ž๋™ ๋กœํ…Œ์ด์…˜
โ”‚
โ”œโ”€โ”€ completion/             # ์—์ด์ „ํŠธ ๋‹ต๋ณ€ ์™„๋ฃŒ ๊ฐ์ง€ ๋ชจ๋“ˆ
โ”‚   โ”œโ”€โ”€ base.py             #   CompletionDetector ์ถ”์ƒ ํด๋ž˜์Šค ๋ฐ ์˜ˆ๋น„ ๊ฐ์ง€ ์ฒด์ธ(Fallback Chain)
โ”‚   โ”œโ”€โ”€ hook.py             #   ํŒŒ์ผ ์‹œ๊ทธ๋„ ๊ธฐ๋ฐ˜ Claude ์‘๋‹ต ์ •์ง€ ํ›…(Stop Hook)
โ”‚   โ”œโ”€โ”€ idle.py             #   ํ…์ŠคํŠธ ์ถœ๋ ฅ์˜ ๋ฌด๋ณ€ํ™”(Idle) ์ƒํƒœ ๊ฐ์ง€๊ธฐ
โ”‚   โ””โ”€โ”€ prompt.py           #   CLI ํ”„๋กฌํ”„ํŠธ ์žฌ์ถœํ˜„ ์—ฌ๋ถ€ ๊ฐ์ง€๊ธฐ
โ”‚
โ”œโ”€โ”€ tui/                    # ๋Œ€ํ™”ํ˜• ํ„ฐ๋ฏธ๋„ UI (TUI)
โ”‚   โ”œโ”€โ”€ app.py              #   TrinityTUI โ€” Rich Live ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ๋ Œ๋”๋ง ์—”์ง„
โ”‚   โ”œโ”€โ”€ session.py          #   InteractiveSession โ€” ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ ๋ฃจํ”„ ๋ฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ UI ๊ฐฑ์‹ 
โ”‚   โ”œโ”€โ”€ events.py           #   TUIEventBus โ€” ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•œ ์ด๋ฒคํŠธ ์ „๋‹ฌ ๋ธŒ๋ฆฟ์ง€
โ”‚   โ””โ”€โ”€ theme.py            #   ๋น„์ฃผ์–ผ ํ…Œ๋งˆ ์ •์˜ (์—์ด์ „ํŠธ๋ณ„ ๊ณ ์œ  ์ƒ‰์ƒ, ์•„์ด์ฝ˜, ์—ญํ• )
โ”‚
โ”œโ”€โ”€ setup/                  # ์ดˆ๊ธฐ ์˜จ๋ณด๋”ฉ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
โ”‚   โ”œโ”€โ”€ detector.py         #   ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ AI CLI ๋„๊ตฌ ์ž๋™ ํƒ์ง€
โ”‚   โ””โ”€โ”€ wizard.py           #   Rich ๊ธฐ๋ฐ˜ ๋Œ€ํ™”ํ˜• ์ดˆ๊ธฐ ์„ค์ • ๋งˆ๋ฒ•์‚ฌ
โ”‚
โ”œโ”€โ”€ tmux/                   # tmux ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ ์ธํ”„๋ผ
โ”‚   โ”œโ”€โ”€ pane.py             #   ์ €์ˆ˜์ค€(Low-level) tmux pane ์ž…์ถœ๋ ฅ(I/O) ์ œ์–ด
โ”‚   โ”œโ”€โ”€ session.py          #   tmux ์„ธ์…˜ ๋ฐ ํ•˜์œ„ ์ฐฝ(Pane) ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ
โ”‚   โ””โ”€โ”€ layout.py           #   TUI ๋ฉ”์ธ ํ™”๋ฉด ๋ฐ ์—์ด์ „ํŠธ ์ฐฝ ๋ถ„ํ•  ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ
โ”‚
โ”œโ”€โ”€ workspace/              # ์—์ด์ „ํŠธ ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ
โ”‚   โ”œโ”€โ”€ isolation.py        #   Git Worktree๋ฅผ ํ™œ์šฉํ•œ ์—์ด์ „ํŠธ๋ณ„ ๋…๋ฆฝ๋œ ๋ณ‘๋ ฌ ํŽธ์ง‘ ํ™˜๊ฒฝ ๊ตฌ์ถ•
โ”‚   โ””โ”€โ”€ managed_home.py     #   ์—์ด์ „ํŠธ ๊ฐ„ ์„ค์ • ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ๊ฒฉ๋ฆฌ๋œ HOME ๋””๋ ‰ํ† ๋ฆฌ ๊ด€๋ฆฌ
โ”‚
โ”œโ”€โ”€ health/
โ”‚   โ””โ”€โ”€ checker.py          #   ์—์ด์ „ํŠธ ํ—ฌ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง (์ƒํƒœ ์ฒดํฌ)
โ”‚
โ”œโ”€โ”€ retry.py                #   ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„(Exponential Backoff) ๋ฐ ์ง€ํ„ฐ(Jitter) ์ ์šฉ ์žฌ์‹œ๋„ ์„ค์ •
โ””โ”€โ”€ error_handler.py        #   ์˜ค๋ฅ˜/ํฌ๋ž˜์‹œ ์ž๋™ ๋ณต๊ตฌ ๋ฐ ์˜ˆ์™ธ ์—์ด์ „ํŠธ ์žฌ์‹œ์ž‘

ํ•ต์‹ฌ ์„ค๊ณ„ ์˜์‚ฌ๊ฒฐ์ •

์„ ํƒํ•œ ์„ค๊ณ„ ๋ฐฉํ–ฅ ๋„์ž… ๋ฐฐ๊ฒฝ ๋ฐ ํ•ฉ๋ฆฌ์„ฑ
๊ณต์œ  ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ์—์ด์ „ํŠธ๋“ค์ด ๋‹จ์ผ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ(shared.md)์— ์ง์ ‘ ์˜๊ฒฌ์„ ์“ฐ๊ณ  ์ฝ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ  ๊ตฌ์กฐ๊ฐ€ ํˆฌ๋ช…ํ•˜์—ฌ ๋””๋ฒ„๊น…์— ํฐ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋ผ์šด๋“œ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ ๊ตฌ์กฐํ™”๋œ ํ† ๋ก  ๋ฐฉ์‹์„ ๋„์ž…ํ•˜์—ฌ ์˜๊ฒฌ ์ฐจ์ด๋กœ ์ธํ•œ ๋์—†๋Š” ๋ฌดํ•œ ๋ฃจํ”„(์ˆœํ™˜ ๋…ผ์Ÿ)๋ฅผ ์›์ฒœ ์ฐจ๋‹จํ•˜๊ณ  ํ™•์‹คํ•œ ๋…ผ์˜ ์ง„ํ–‰์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ ๊ตฌ๋™ํ˜• TUI ๋น„๋™๊ธฐ asyncio ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ํ(Queue)๋ฅผ ํ™œ์šฉํ•ด ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์—†์ด ๊ฐ ์—์ด์ „ํŠธ์˜ ์‘๋‹ต์„ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ํ•ฉ์˜ ๊ฐ์ง€ ํ‚ค์›Œ๋“œ ๋งค์นญ ๋ฐฉ์‹์„ ๋„์ž…ํ•˜์—ฌ ๋น ๋ฅด๊ณ  ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ํ•ฉ์˜๋ฅผ ํŒ์ •ํ•˜๋ฉฐ, ๋ถ€์ • ํ‘œํ˜„ ํ•„ํ„ฐ๋ง์„ ํ†ตํ•ด ์˜ค์‹ฌ์œจ์„ ํฌ๊ฒŒ ๋‚ฎ์ท„์Šต๋‹ˆ๋‹ค.
์ œ๊ณต์ž ๋น„์˜์กด์„ฑ ์—์ด์ „ํŠธ ์ถ”์ƒ ํด๋ž˜์Šค AgentWrapper ์„ค๊ณ„๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ‘œ์ค€ํ™”ํ•˜์—ฌ ํ–ฅํ›„ ์ƒˆ๋กœ์šด AI CLI ๋„๊ตฌ(์˜ˆ: ํƒ€์‚ฌ ๋ชจ๋ธ CLI)๋„ ๋งค์šฐ ์†์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋“€์–ผ ์‹คํ–‰ ๋ชจ๋“œ ์ง€์› ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ CI/CD ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์œ„ํ•œ Print ๋ชจ๋“œ์™€ ์‹ค์‹œ๊ฐ„ ํ„ฐ๋ฏธ๋„ ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•œ tmux ๊ธฐ๋ฐ˜ ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ง ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

์š”๊ตฌ์‚ฌํ•ญ ๋„์ž… ๋ฐฐ๊ฒฝ ํ•„์ˆ˜ ์—ฌ๋ถ€
Python 3.10+ ์ „์ฒด ์‹œ์Šคํ…œ ๋Ÿฐํƒ€์ž„ ๊ตฌ๋™ โœ… ํ•„์ˆ˜
Claude Code CLI ์„ค๊ณ„์ž(Architect) ์—์ด์ „ํŠธ ๊ตฌ๋™ ์„ ํƒ ์‚ฌํ•ญ
Codex CLI ๊ตฌํ˜„์ž(Implementer) ์—์ด์ „ํŠธ ๊ตฌ๋™ ์„ ํƒ ์‚ฌํ•ญ
Gemini CLI ๊ฒ€ํ† ์ž(Reviewer) ์—์ด์ „ํŠธ ๊ตฌ๋™ ์„ ํƒ ์‚ฌํ•ญ
tmux ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ(Interactive Layout) ๊ตฌ๋™ ์„ ํƒ ์‚ฌํ•ญ

์ •์ƒ์ ์œผ๋กœ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ์ตœ์†Œ ํ•œ ๊ฐœ ์ด์ƒ์˜ AI CLI ๋„๊ตฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. trinity init ๋ช…๋ น ์‹คํ–‰ ์‹œ ํ˜„์žฌ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์— ์„ค์น˜๋˜์–ด ๋™์ž‘ ๊ฐ€๋Šฅํ•œ CLI ๋„๊ตฌ๋ฅผ ์ž๋™์œผ๋กœ ํƒ์ง€ํ•˜์—ฌ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงช ๊ฐœ๋ฐœ ๋ฐ ๊ธฐ์—ฌ ๋ฐฉ๋ฒ•

# ์ €์žฅ์†Œ ํด๋ก  ๋ฐ ํŒจํ‚ค์ง€ ์„ค์ •
git clone https://github.com/hongdangmoo49/Trinity.git
cd Trinity
uv sync

# ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์‹คํ–‰ (์ด 596๊ฐœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค)
uv run pytest tests/ -v

# ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฆฌํฌํŠธ์™€ ํ•จ๊ป˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰
uv run pytest tests/ --cov=trinity --cov-report=term-missing

๋นŒ๋“œ ๋ฐ ํŒจํ‚ค์ง€ ๋ฐฐํฌ

# pyproject.toml ๋ฐ src/trinity/__init__.py ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ
rm -rf dist/
uv build
uv publish --token <PYPI_TOKEN>

๐Ÿ“Š ํ”„๋กœ์ ํŠธ ํ†ต๊ณ„

์ง€ํ‘œ ์ˆ˜์น˜
๋ฒ„์ „ 0.3.0
ํ…Œ์ŠคํŠธ 596๊ฐœ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ
์ปค๋ฒ„๋ฆฌ์ง€ ์•ฝ 87%
์†Œ์Šค ํŒŒ์ผ 40์—ฌ ๊ฐœ
์ฃผ์š” ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ click, rich, tomli
๊ถŒ์žฅ Python ๋ฒ„์ „ 3.10+

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ •๋ณด๋Š” LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.


"์„ธ ๊ฐœ์˜ ๋‘๋‡Œ๊ฐ€ ๋ชจ์ด๋ฉด ํ•˜๋‚˜๋ณด๋‹ค ํ›จ์”ฌ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค."

Trinity โ€” GitHub ยท PyPI ยท Issues

About

Three minds, one context. Multi-agent AI orchestrator that unifies Claude Code, Codex, and Gemini through shared context, round-based deliberation, consensus building, and autonomous task distribution.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages