Skip to content

eunhhu/charm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

34 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Charm

Evidence-first local agent harness + OPENCODE-grade TUI = auditable Rust CLI coding agent

Charm์€ Windsurf Cascade๊ธ‰ agent harness์™€ OPENCODE๊ธ‰ TUI/๋„๊ตฌ๋ฅผ ๊ฒฐํ•ฉํ•œ Rust ๊ธฐ๋ฐ˜ AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ CLI์ž…๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ž‘์—…์„ ์œ„ํ•œ ๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ๋กœ, ์ž๋™ํ™”๋œ ์ธ๋ฑ์‹ฑ, ๋„๊ตฌ ํ˜ธ์ถœ, ์„ธ์…˜ ๊ด€๋ฆฌ, ๋ฉ€ํ‹ฐ๋ชจ๋ธ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Charm์˜ ์žฅ๊ธฐ ๋ชฉํ‘œ๋Š” ๋‹จ์ˆœํ•œ ํ„ฐ๋ฏธ๋„ ์ฑ—๋ด‡์ด ์•„๋‹ˆ๋ผ ๊ทผ๊ฑฐ ์ถ”์  ๊ฐ€๋Šฅํ•œ ๋กœ์ปฌ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ OS์ž…๋‹ˆ๋‹ค. Charm์€ ๋ชจ๋ธ์—๊ฒŒ API์™€ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ์–ตํ•˜๋ผ๊ณ  ์‹œํ‚ค์ง€ ์•Š๊ณ , ๋„๊ตฌ์™€ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๊ฒ€์ฆ๋œ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ€์ ธ์˜จ ๋’ค ๊ทธ ๊ทผ๊ฑฐ๋ฅผ ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋งž๊ฒŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

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


๋ชฉํ‘œ

  • Cascade์˜ ๊ฐ•์ : ๋›ฐ์–ด๋‚œ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ดํ•ด, ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ, ํˆด ํ˜ธ์ถœ ์›Œํฌํ”Œ๋กœ์šฐ
  • OPENCODE์˜ ๊ฐ•์ : ๊ฐ•๋ ฅํ•œ TUI, ํ’๋ถ€ํ•œ ๋„๊ตฌ ์„ธํŠธ, ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ
  • Charm์˜ ์ฐจ๋ณ„์„ฑ: evidence-first, tool-first, reference-first, trace-first ํ•˜๋„ค์Šค
  • ๊ฒฐํ•ฉ: ๋กœ์ปฌ์—์„œ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜์ง€๋งŒ ๋ชจ๋“  ํŒ๋‹จ๊ณผ ๋ณ€๊ฒฝ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ
  • ๋ชจ๋ธ ๋…๋ฆฝ์„ฑ: ๊ฐ•ํ•œ ๋ชจ๋ธ์€ ๋” ๋น ๋ฅด๊ฒŒ ์ผํ•˜๊ณ , ์•ฝํ•œ ๋ชจ๋ธ๋„ ๊ฐ™์€ gate์™€ evidence spine์„ ๋”ฐ๋ผ ์ตœ์†Œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ฒ ํ•™

๋Œ€๋ถ€๋ถ„์˜ ์—์ด์ „ํŠธ๋Š” ์ž‘์€ ์ปจํ…์ŠคํŠธ์—์„œ ์‹œ์ž‘ํ•ด ๋ชจ๋ธ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•  ๋•Œ๋งŒ ๋„๊ตฌ์™€ ๊ฒ€์ƒ‰์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. Charm์€ ๋ฐ˜๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์—์ด์ „ํŠธ:
  3์—์„œ ์‹œ์ž‘ -> ํ•„์š”ํ•˜๋ฉด 10๊นŒ์ง€ ํ™•์žฅ

Charm:
  10 ์ˆ˜์ค€์˜ ์ž‘์—… ์ ˆ์ฐจ๋ฅผ ๊ธฐ๋ณธ ๊ฐ€์ • -> ํ•„์š” ์—†๋Š” ๊ฒƒ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ์‚ฐ

์ด ์ฒ ํ•™์€ ํ† ํฐ ๋‚ญ๋น„๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Charm์€ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํžˆ ๊นŠ๊ฒŒ ์กฐ์‚ฌํ•˜๊ณ , ๋ชจ๋ธ์—๊ฒŒ๋Š” TokenSaver์™€ PromptCompiler๋ฅผ ๊ฑฐ์นœ ์ตœ์†Œํ•œ์˜ ์ง„์‹คํ•œ ์ปจํ…์ŠคํŠธ๋งŒ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉํ–ฅ์„ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์›์น™:

  • Tool-first: ์ฝ”๋“œ, ํ˜„์žฌ ์ƒํƒœ, ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ํŒŒ์ผ ๋‚ด์šฉ์— ๋Œ€ํ•œ ํŒ๋‹จ์€ ๋„๊ตฌ ์‚ฌ์šฉ์ด ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋„๊ตฌ ์ƒ๋žต์€ ๋ชจ๋ธ์˜ ๊ฐ์ด ์•„๋‹ˆ๋ผ skip gate๊ฐ€ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Reference-first: ์™ธ๋ถ€ API, ํ”„๋ ˆ์ž„์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์—…์€ Context7 ๊ฐ™์€ docs MCP, ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ์†Œ์Šค, ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • Concretize-first: ์ถ”์ƒ์ ์ธ ์š”์ฒญ์€ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋ชฉํ‘œ, ๋ฒ”์œ„, ์„ฑ๊ณต ์กฐ๊ฑด, ๊ฒ€์ฆ ๋ฐฉ๋ฒ•์ด ๋‹ด๊ธด task contract๋กœ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.
  • Token-minified: raw output์€ trace์— ๋ณด์กดํ•˜๊ณ , ๋ชจ๋ธ์—๊ฒŒ๋Š” line/span/error๋ฅผ ์žƒ์ง€ ์•Š๋Š” ์ตœ์†Œ evidence view๋งŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Verification-first completion: ์™„๋ฃŒ ์„ ์–ธ์€ ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ, ํƒ€์ž…์ฒดํฌ, ์ˆ˜๋™ ์žฌํ˜„ ๊ฐ™์€ ๊ฒ€์ฆ ๊ทผ๊ฑฐ ๋’ค์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • Trace-first: ๋ชจ๋“  ๋„๊ตฌ ํ˜ธ์ถœ, ํŽธ์ง‘, ํ…Œ์ŠคํŠธ, ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋‚˜์ค‘์— ์„ค๋ช… ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ €์ ์„ ๋†’์ด๋Š” ์‹คํ–‰ ์ „๋žต

Charm์€ ๋ชจ๋ธ์„ ์‹คํ–‰ ์ฃผ์ฒด๋กœ๋งŒ ๋‘์ง€ ์•Š๊ณ , ํ•˜๋„ค์Šค๋ฅผ ์‹คํ–‰ ํ†ต์ œ์ธต์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค.

User request
-> TaskContract
-> EvidencePack
-> ReferencePack
-> PromptSections
-> Model/tool loop
-> Verification
-> Trace

์ด ๊ตฌ์กฐ์—์„œ ๋ชจ๋ธ์€ "๋ชจ๋“  ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๋‘๋‡Œ"๊ฐ€ ์•„๋‹ˆ๋ผ, Charm์ด ์ˆ˜์ง‘ํ•œ ๊ทผ๊ฑฐ์™€ ๊ณ„์•ฝ์„ ๋ฐ”ํƒ•์œผ๋กœ ํŒ๋‹จํ•˜๋Š” ์‹คํ–‰ ์—”์ง„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋ธ์ด ๋ฐ”๋€Œ์–ด๋„ ์ž‘์—… ํ’ˆ์งˆ์„ ์ขŒ์šฐํ•˜๋Š” ํ•ต์‹ฌ ์ ˆ์ฐจ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ „๋žต๊ณผ ์ฒ ํ•™์€ docs/charm-strategy.md๋ฅผ ๋ณด์„ธ์š”.


์„ค์น˜ ๋ฐ ๋นŒ๋“œ

์š”๊ตฌ์‚ฌํ•ญ

  • Rust 1.85+ (2024 edition)
  • Git

๋นŒ๋“œ

# ํด๋ก 
git clone <repository-url>
cd charm

# ๋นŒ๋“œ
rtk cargo build --release

# ๋˜๋Š” ๊ฐœ๋ฐœ ๋นŒ๋“œ
rtk cargo build

ํ…Œ์ŠคํŠธ

# ์ „์ฒด ํ…Œ์ŠคํŠธ
rtk cargo test

# ์ฒดํฌ๋งŒ (๋น ๋ฅธ ๊ฒ€์ฆ)
rtk cargo check

์‹คํ–‰ ์˜ˆ์‹œ

๋Œ€ํ™”ํ˜• ์„ธ์…˜ ์‹œ์ž‘

# ๊ธฐ๋ณธ ๋ชจ๋ธ๋กœ ์‹œ์ž‘ (๊ธฐ๋ณธ: moonshotai/kimi-k2.6)
charm

# ํ”„๋กฌํ”„ํŠธ ์ง์ ‘ ์ „๋‹ฌ
charm "์ด ํ”„๋กœ์ ํŠธ ์„ค๋ช…ํ•ด์ค˜"

# ํŠน์ • ๋ชจ๋ธ ์‚ฌ์šฉ
charm model claude-sonnet-4-5 "๋ฆฌํŒฉํ† ๋งํ•ด์ค˜"
charm model openai/gpt-4.1 "๋ฒ„๊ทธ ์ˆ˜์ •ํ•ด์ค˜"

# ์ƒˆ ์„ธ์…˜ ์‹œ์ž‘
charm new

# ๋งˆ์ง€๋ง‰ ์„ธ์…˜ ์ด์–ดํ•˜๊ธฐ
charm resume

# ํŠน์ • ์„ธ์…˜ ID๋กœ ์žฌ๊ฐœ
charm session <session-id>

# ๋‹ค๋ฅธ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ ์‹œ์ž‘
charm workspace /path/to/project

# ๋‹ค๋ฅธ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ ๋ช…๋ น ์‹คํ–‰
charm workspace /path/to/project index

์›Œํฌ์ŠคํŽ˜์ด์Šค ์ดˆ๊ธฐํ™”

charm init
# .charm/ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

์ฝ”๋“œ ์ธ๋ฑ์‹ฑ

charm index
# ์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒŒ์ผ ๋ฐ ์‹ฌ๋ณผ ์ธ๋ฑ์‹ฑ

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ ๋ชฉ๋ก

charm tools

๋„๊ตฌ ์ง์ ‘ ์‹คํ–‰

charm exec <tool-name> --args '{"key": "value"}'

์ž‘์—… ์œ„์ž„ (Delegate)

# ํ”Œ๋ž˜๋„ˆ ๋ชจ๋ธ์ด ์ž‘์—…์„ ๋ถ„ํ•ดํ•˜๊ณ  ์‹คํ–‰
charm delegate "๋ฆฌํŒฉํ† ๋ง: ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ฐœ์„ "

# ์ปค์Šคํ…€ ํ”Œ๋ž˜๋„ˆ ๋ชจ๋ธ ์ง€์ •
charm delegate "API ์ถ”๊ฐ€" --planner-model claude-opus-4

Provider ์ธ์ฆ ์„ค์ •

Charm์€ ๋‹ค์Œ AI providers๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ UX๋Š” REPL ์•ˆ์—์„œ /provider connect <id>๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ~/.charm/auth.json์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋„ ๊ณ„์† ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Provider ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋น„๊ณ 
OpenAI OPENAI_API_KEY OpenAI API ํ‚ค
OpenAI Codex CODEX_HOME ๋˜๋Š” ~/.codex/auth.json Codex CLI ์ธ์ฆ ํŒŒ์ผ ์žฌ์‚ฌ์šฉ
Anthropic ANTHROPIC_API_KEY Claude API ํ‚ค
Google (Gemini) GEMINI_API_KEY ๋˜๋Š” GOOGLE_API_KEY Google AI API ํ‚ค
OpenRouter OPENROUTER_API_KEY ๊ธฐ๋ณธ๊ฐ’ (moonshotai/kimi-k2.6)
Ollama OLLAMA_API_KEY (์„ ํƒ) ๋กœ์ปฌ ๋ชจ๋ธ, ๊ธฐ๋ณธ๊ฐ’ "ollama"

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ธ์ฆ ์˜ˆ์‹œ

# OpenAI
export OPENAI_API_KEY="sk-..."

# Anthropic
export ANTHROPIC_API_KEY="sk-ant-..."

# Google/Gemini
export GEMINI_API_KEY="..."
# ๋˜๋Š”
export GOOGLE_API_KEY="..."

# OpenRouter (๊ธฐ๋ณธ๊ฐ’)
export OPENROUTER_API_KEY="sk-or-..."

# Ollama (๋กœ์ปฌ)
export OLLAMA_API_KEY="ollama"  # ์„ ํƒ์‚ฌํ•ญ

TUI์—์„œ๋Š” Ctrl+Shift+P ๋˜๋Š” /provider๋กœ provider ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. mac/terminal์ด Ctrl+Shift+letter๋ฅผ ์•ฑ๊นŒ์ง€ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋ฉด Ctrl+O ๋˜๋Š” Ctrl+Option+P๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์—ฐ๊ฒฐ๋œ provider๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น provider ๋ชจ๋ธ ๋ชฉ๋ก์œผ๋กœ ๋ฐ”๋กœ ์ด๋™ํ•˜๊ณ , ๋ฏธ์—ฐ๊ฒฐ provider๋ฅผ ์„ ํƒํ•˜๋ฉด REPL ์•ˆ์—์„œ auth wizard๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค.

๋ชจ๋ธ ์ง€์ • ๋ฐฉ์‹

# provider/model ํ˜•์‹
charm model anthropic/claude-sonnet-4-5
charm model openai/gpt-4.1
charm model google/gemini-2.5-pro
charm model ollama/qwen3-coder:30b

# ์ž๋™ provider ๊ฐ์ง€
charm model claude-...        # anthropic
charm model gpt-...           # openai
charm model gemini-...        # google
charm model <name>:<tag>      # ollama

์„ธ์…˜ ์ค‘์—๋Š” /model provider/model-id๋กœ provider client๊นŒ์ง€ ์žฌ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: /model ollama/qwen3-coder:30b, /model openai/gpt-4.1.


์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

charm/
โ”œโ”€โ”€ cli.rs              # CLI ์ธ์ž ํŒŒ์‹ฑ (clap)
โ”œโ”€โ”€ main.rs             # ์ง„์ž…์ , ๋ช…๋ น ๋ผ์šฐํŒ…
โ”œโ”€โ”€ runtime/
โ”‚   โ”œโ”€โ”€ session_runtime.rs   # ์„ธ์…˜ ๊ด€๋ฆฌ, TUI ํ†ตํ•ฉ
โ”‚   โ”œโ”€โ”€ router.rs            # ๋ฉ”์‹œ์ง€ ๋ผ์šฐํŒ…
โ”‚   โ”œโ”€โ”€ mcp.rs               # MCP ํ”„๋กœํ† ์ฝœ
โ”‚   โ””โ”€โ”€ workspace.rs         # ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒํƒœ
โ”œโ”€โ”€ providers/
โ”‚   โ”œโ”€โ”€ factory.rs           # Provider ํŒฉํ† ๋ฆฌ, ์ธ์ฆ ํ•ด๊ฒฐ
โ”‚   โ”œโ”€โ”€ client.rs            # ๊ณตํ†ต ํด๋ผ์ด์–ธํŠธ ํŠธ๋ ˆ์ดํŠธ
โ”‚   โ”œโ”€โ”€ openai.rs            # OpenAI ๊ตฌํ˜„
โ”‚   โ”œโ”€โ”€ anthropic.rs         # Anthropic ๊ตฌํ˜„
โ”‚   โ”œโ”€โ”€ google.rs            # Google/Gemini ๊ตฌํ˜„
โ”‚   โ”œโ”€โ”€ openrouter.rs        # OpenRouter ๊ตฌํ˜„
โ”‚   โ”œโ”€โ”€ ollama.rs            # Ollama ๋กœ์ปฌ ๋ชจ๋ธ
โ”‚   โ””โ”€โ”€ openai_codex.rs      # OpenAI Codex
โ”œโ”€โ”€ tools/
โ”‚   โ”œโ”€โ”€ mod.rs               # ๋„๊ตฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
โ”‚   โ”œโ”€โ”€ command.rs           # ์…ธ ๋ช…๋ น ์‹คํ–‰
โ”‚   โ”œโ”€โ”€ file.rs              # ํŒŒ์ผ ์กฐ์ž‘
โ”‚   โ”œโ”€โ”€ search.rs            # ์ฝ”๋“œ ๊ฒ€์ƒ‰
โ”‚   โ”œโ”€โ”€ browser.rs           # ์›น ๋ธŒ๋ผ์šฐ์ง•
โ”‚   โ”œโ”€โ”€ web_search.rs        # ์›น ๊ฒ€์ƒ‰
โ”‚   โ”œโ”€โ”€ github_cli.rs        # GitHub CLI ํ†ตํ•ฉ
โ”‚   โ”œโ”€โ”€ retrieval.rs         # ์ปจํ…์ŠคํŠธ ๊ฒ€์ƒ‰
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ agent/
โ”‚   โ”œโ”€โ”€ runner.rs            # ์—์ด์ „ํŠธ ์‹คํ–‰๊ธฐ
โ”‚   โ”œโ”€โ”€ loop_agent.rs        # ๋ฉ”์ธ ๋ฃจํ”„
โ”‚   โ”œโ”€โ”€ prompt.rs            # ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง
โ”‚   โ”œโ”€โ”€ task_concretizer.rs  # ์š”์ฒญ์„ task contract๋กœ ๊ตฌ์ฒดํ™”
โ”‚   โ”œโ”€โ”€ reference_broker.rs  # ์™ธ๋ถ€/ํŒจํ‚ค์ง€ ๋ ˆํผ๋Ÿฐ์Šค pack ์ค€๋น„
โ”‚   โ”œโ”€โ”€ token_saver.rs       # raw output -> minified evidence view
โ”‚   โ”œโ”€โ”€ prompt_compiler.rs   # typed prompt section ์ปดํŒŒ์ผ
โ”‚   โ””โ”€โ”€ context_compressor.rs # ์ปจํ…์ŠคํŠธ ์••์ถ•
โ”œโ”€โ”€ indexer/
โ”‚   โ”œโ”€โ”€ parser.rs            # ์ฝ”๋“œ ํŒŒ์‹ฑ (tree-sitter)
โ”‚   โ”œโ”€โ”€ store.rs             # ์ธ๋ฑ์Šค ์ €์žฅ
โ”‚   โ””โ”€โ”€ types.rs             # ์ธ๋ฑ์Šค ํƒ€์ž…
โ”œโ”€โ”€ harness/
โ”‚   โ”œโ”€โ”€ checkpoint.rs        # ์‹คํ–‰ ์ฒดํฌํฌ์ธํŠธ
โ”‚   โ””โ”€โ”€ memory.rs            # ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
โ”œโ”€โ”€ tui/
โ”‚   โ””โ”€โ”€ app.rs               # Ratatui ๊ธฐ๋ฐ˜ TUI
โ””โ”€โ”€ orchestrator/
    โ””โ”€โ”€ broker.rs            # ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜

ํ•ต์‹ฌ ํ๋ฆ„

  1. CLI ํŒŒ์‹ฑ (cli.rs): ๋ช…๋ นํ–‰ ์ธ์ž ํ•ด์„
  2. Provider ํ•ด๊ฒฐ (providers/factory.rs): ๋ชจ๋ธ ๋ฌธ์ž์—ด โ†’ Provider + ์ธ์ฆ
  3. ์„ธ์…˜ ๋ถ€ํŠธ (runtime/session_runtime.rs): TUI + ์—์ด์ „ํŠธ ์ดˆ๊ธฐํ™”
  4. ์—์ด์ „ํŠธ ๋ฃจํ”„ (agent/): LLM ํ˜ธ์ถœ โ†’ ๋„๊ตฌ ์‹คํ–‰ โ†’ ์‘๋‹ต
  5. TUI ๋ Œ๋”๋ง (tui/): Ratatui๋กœ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ธํ„ฐํŽ˜์ด์Šค

์ด ๊ธฐ๋ณธ ํ๋ฆ„์€ ํ˜„์žฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ œํ’ˆ ๋ผˆ๋Œ€์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ตœ์ข…ํ˜• ํ•˜๋„ค์Šค ํ๋ฆ„์€ ์ด ๋ผˆ๋Œ€ ์œ„์— ๊ฐ•์ œ gate์™€ evidence compiler๋ฅผ ๋ผ์›Œ ๋„ฃ๋Š” ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

์ตœ์ข…ํ˜• ํ•˜๋„ค์Šค ํ๋ฆ„

User task
-> TaskConcretizer
-> ReferenceGate
-> FastContextWorker
-> TokenSaver
-> PromptCompiler
-> Model/tool loop
-> VerificationGate
-> AgentTraceStore
-> SessionInsights

์ด ํ๋ฆ„์€ ์•„์ง ์ „๋ถ€ ๊ตฌํ˜„๋œ ์ตœ์ข… ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ Charm์ด ํ–ฅํ•ด์•ผ ํ•  ์ œํ’ˆ ์„ค๊ณ„ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋Š” ์Šค์ผˆ๋ ˆํ†ค ๋˜๋Š” ๋ถ€๋ถ„ ๊ตฌํ˜„ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ƒˆ ๊ฐœ๋…์„ ๋” ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด๋ฏธ ์žˆ๋Š” TaskConcretizer, ReferenceBroker, TokenSaver, PromptCompiler๋ฅผ ์„ธ์…˜ ๋Ÿฐํƒ€์ž„์˜ ํ•„์ˆ˜ ๊ฒฝ๋กœ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


ํ˜„์žฌ ์ƒํƒœ

์ตœ๊ทผ ๊ตฌํ˜„๋œ ํ•ต์‹ฌ ๊ฒฝ๋กœ

  • Task contract ๊ธฐ๋ณธ ๊ฒฝ๋กœ: ์„ธ์…˜ ์ž…๋ ฅ์ด TaskConcretizer๋ฅผ ๊ฑฐ์ณ ๋ชฉํ‘œ, ์ˆ˜์šฉ ์กฐ๊ฑด, ๊ฒ€์ฆ ์กฐ๊ฑด์„ ๊ฐ€์ง„ contract๋กœ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.
  • Reference-first ๊ฒฝ๋กœ: ReferenceBroker๊ฐ€ Context7, local package source, registry, web fallback ์ˆœ์„œ๋กœ ReferencePack์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. outbound HTTP๋Š” URL guard์™€ DNS pinning์„ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Prompt compiler ๊ฒฝ๋กœ: PromptAssembler๊ฐ€ task contract, reference pack, verification gate, autonomy policy๋ฅผ typed prompt section์œผ๋กœ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
  • Trace/minification ๊ฒฝ๋กœ: command full output์€ .charm/logs/commands/<command_id>.log์— ์ €์žฅํ•˜๊ณ  log_ref/output_hash/byte count๋ฅผ tool metadata์™€ trace์— ๋‚จ๊น๋‹ˆ๋‹ค. ๋ชจ๋ธ-facing view๋Š” TokenSaver/RTK filter๋กœ ์ค„์ด๋˜ full log reference๋Š” ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • Runtime gates: ํŒŒ์ผ ํŽธ์ง‘ ์ „ repo evidence gate, completion claim ์ „ verification gate, ์œ„ํ—˜๋„ ๊ธฐ๋ฐ˜ approval gate๊ฐ€ ์„ธ์…˜ ๋Ÿฐํƒ€์ž„์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • Command lifecycle: non-blocking command๋Š” poll_command๋กœ ์กฐํšŒํ•˜๊ณ  cancel_command๋กœ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Read path cache: ToolRegistry์˜ read_range๋Š” .charm/cache/file-cache.json backed FileCache๋ฅผ ์‚ฌ์šฉํ•ด ์„ธ์…˜ ๊ฐ„ ๋ฐ˜๋ณต ํŒŒ์ผ ์ฝ๊ธฐ ๋น„์šฉ์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • Slash command modal: /help, /audit, /audit insights, /audit replay, /evidence*, /mcp, /lsp*, /provider์ฒ˜๋Ÿผ ๊ธด ์ถœ๋ ฅ์€ transcript๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ  scrollable modal๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • Provider connector: /provider์™€ provider overlay๊ฐ€ ์ธ์ฆ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , /model provider/model-id๋Š” ์„ธ์…˜ pinned model๋ฟ ์•„๋‹ˆ๋ผ ์‹ค์ œ provider client๋„ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • Evidence browser: /evidence, /evidence repo, /evidence refs๊ฐ€ ์ €์žฅ๋œ ์„ธ์…˜ evidence/reference pack์„ .charm/sessions/<id>/์—์„œ ์ฝ์–ด ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค.
  • Audit insights: /audit insights [n]๊ฐ€ ๋ฐ˜๋ณต ์‹คํŒจ, missed context, missing reference risk๋ฅผ trace์—์„œ ๋ถ„์„ํ•˜๊ณ  candidate workflow/rule/memory๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
  • Sub-agent export: /agent export <id>๊ฐ€ sub-agent worktree status/diff/file snapshot์„ .charm/exports/ markdown artifact๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • Sub-agent PR draft: /agent pr <id>๊ฐ€ remote ์ธ์ฆ ์—†์ด ๊ฒ€ํ†  ๊ฐ€๋Šฅํ•œ PR title/body/test plan markdown์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ์ƒํƒœ ํ™•์ธ

# ์ปดํŒŒ์ผ ์ฒดํฌ
rtk cargo check

# ํ…Œ์ŠคํŠธ ์‹คํ–‰
rtk cargo test

์•Œ๋ ค์ง„ ์ œํ•œ์‚ฌํ•ญ

  • Rust ์‹ฌ๋ณผ ์ธ๋ฑ์‹ฑ: ํ•จ์ˆ˜, ๊ตฌ์กฐ์ฒด, enum, impl ๋ฉ”์„œ๋“œ ์ง€์› (๋งคํฌ๋กœ, const/static, ๊ณ ๊ธ‰ trait/generic ์ฒ˜๋ฆฌ๋Š” ์ œํ•œ์ )
  • ์ปดํŒŒ์ผ ์›Œ๋‹: CI๋Š” cargo clippy --all-targets --all-features -- -D warnings๋กœ warning-free ์ƒํƒœ๋ฅผ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.
  • Fast Executor: AgentLoop์™€ TUI SessionRuntime์˜ ๋…๋ฆฝ read-only batch ๊ฒฝ๋กœ์— ์—ฐ๊ฒฐ๋จ. TUI๋Š” mixed tool-call ์‘๋‹ต์—์„œ๋„ consecutive read/search chunk๋ฅผ ๋ณ‘๋ ฌ ์‹คํ–‰ํ•˜๊ณ , start/finish event ordering, trace, provider tool_call_id alignment๋ฅผ ๋ณด์กดํ•˜๋ฉฐ mutating/approval-gated tools๋Š” ์ˆœ์ฐจ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจ/์ •์ฑ…์ฐจ๋‹จ/์‹คํ–‰์ค‘ mutation ๋’ค์˜ ์ถ”๊ฐ€ mutation์€ mutating_scheduler synthetic result๋กœ ์ฐจ๋‹จํ•ด partial write ํ™•์‚ฐ์„ ๋ง‰์Šต๋‹ˆ๋‹ค.
  • ์บ์‹œ ์‹œ์Šคํ…œ: ToolCache๋Š” ๊ฒ€์ƒ‰๋ฅ˜ ๊ฒฐ๊ณผ, FileCache๋Š” persistent read_range ํŒŒ์ผ ์ฝ๊ธฐ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Delegate ๋ชจ๋“œ: ์‹คํ—˜์  ๊ธฐ๋Šฅ

๊ฐœ๋ฐœ ์ค‘์ธ ๊ธฐ๋Šฅ

  • ์ปจํ…์ŠคํŠธ ์••์ถ• ์ตœ์ ํ™”
  • ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ž…๋ ฅ ์ง€์›
  • MCP ์„œ๋ฒ„ ํ†ตํ•ฉ ํ™•์žฅ

๋ผ์ด์„ ์Šค

[๋ผ์ด์„ ์Šค ์ •๋ณด ์ถ”๊ฐ€ ์˜ˆ์ •]


๊ธฐ์—ฌ

์ด ํ”„๋กœ์ ํŠธ๋Š” Windsurf Cascade์˜ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

About

Harness agent inspired by Cascade-style coding workflows.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages