An open API service indexing awesome lists of open source software.

https://github.com/zzunkie/yardlet

Local AI workbench: plan, queue, route, validate, and hand off long-running work using your already-installed Codex and Claude Code CLIs as hidden workers.
https://github.com/zzunkie/yardlet

agent-orchestration agentic ai ai-agents ai-workbench anthropic-claude claude-code cli codex coding-agents developer-tools llm local-first loop-engineering openai-codex ratatui rust terminal-ui tui workflow-automation

Last synced: 1 day ago
JSON representation

Local AI workbench: plan, queue, route, validate, and hand off long-running work using your already-installed Codex and Claude Code CLIs as hidden workers.

Awesome Lists containing this project

README

          

# Yardlet

[![crates.io](https://img.shields.io/crates/v/yardlet.svg)](https://crates.io/crates/yardlet)
[![CI](https://github.com/zzunkie/yardlet/actions/workflows/ci.yml/badge.svg)](https://github.com/zzunkie/yardlet/actions/workflows/ci.yml)
[![downloads](https://img.shields.io/crates/d/yardlet.svg)](https://crates.io/crates/yardlet)
[![license: MIT](https://img.shields.io/crates/l/yardlet.svg)](LICENSE)

[English](README.md) | **ํ•œ๊ตญ์–ด**

> **Rent the intelligence. Own the loop.** (์ง€๋Šฅ์€ ๋นŒ๋ฆฌ๊ณ , ๋ฃจํ”„๋Š” ์†Œ์œ ํ•œ๋‹ค.)
> Yardlet์€ ๋‹น์‹ ์ด ์ด๋ฏธ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ๋ฃจํ”„๋ฅผ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค. ์˜๋„๋ฅผ
> ๋ช‡ ๋ฌธ์žฅ์œผ๋กœ ์ง„์ˆ ํ•˜๋ฉด, Yardlet์ด ๊ทธ๊ฒƒ์„ ์ž‘์—…์œผ๋กœ ๊ณ„ํšํ•˜๊ณ , Claude Code๋‚˜ Codex๋ฅผ
> ๊ต์ฒด ๊ฐ€๋Šฅํ•œ ์›Œ์ปค๋กœ ๊ตฌ๋™ํ•˜๊ณ , ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ๊ฒ€์ฆํ•˜๋ฉฐ, ๊ณ„ํš๊ณผ ๋ฉ”๋ชจ๋ฆฌ,
> ์‹ ๋ขฐ ๊ธฐ๋ก, ํ•ธ๋“œ์˜คํ”„๋ฅผ ๋‹น์‹ ์˜ ์ €์žฅ์†Œ์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ๋นŒ๋ฆฌ๊ณ , ๋ฃจํ”„๋Š” ๋‹น์‹ ์˜
> ๊ฒƒ์ž…๋‹ˆ๋‹ค.

![Yardlet terminal UI demo](docs/assets/yardlet-demo.gif)

Yardlet์€ ์ฝ”๋”ฉ CLI๋ฅผ ์–‡๊ฒŒ ๊ฐ์‹ผ ๋ž˜ํผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์›Œ์ปค CLI๋Š” Yardlet์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€
์†Œ์œ ํ•˜๋Š” ๋ฃจํ”„ ์•ˆ์˜, ๊ต์ฒด ๊ฐ€๋Šฅํ•œ ํ•œ ๋ถ€ํ’ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ํ”Œ๋ž˜๋‹ ๊ฒŒ์ดํŠธ, ์ž‘์—…๋ณ„ ๋ผ์šฐํŒ…,
๊ฒฐ์ฝ” ์‹คํ–‰์ž๊ฐ€ ์•„๋‹Œ ๊ฒฐ์ •๋ก ์  ๊ฒ€์ฆ์ž, ์ €์žฅ์†Œ์— ์‚ฌ๋Š” ์ง€์† ์ƒํƒœ, ํฌ๋ž˜์‹œ ๋ณต๊ตฌ, ํ”„๋กœ์ ํŠธ
๋ฉ”๋ชจ๋ฆฌ, ๋‹น์‹ ์˜ ์‹คํ–‰ ์ด๋ ฅ์œผ๋กœ ๋งŒ๋“  ์‹ ๋ขฐ ๋ฆฌํฌํŠธ, ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์˜ ์ €์žฅ์†Œ์—์„œ ๋ณต๋ฆฌ๋กœ ์Œ“์ด๋Š”
ํ•™์Šต ๋ฃจํ”„๊ฐ€ ๊ทธ ๋ฃจํ”„๋ฅผ ์ด๋ฃน๋‹ˆ๋‹ค. ์›Œ์ปค๋ฅผ ๋ฐ”๊ฟ”๋„ ๋ฃจํ”„์™€ ๊ธฐ๋ก, ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด ๊ฐ€๋ฅด์นœ ๋ชจ๋“ 
๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ๋‚จ์Šต๋‹ˆ๋‹ค.

*"์ €๋Š” ๋” ์ด์ƒ Claude์—๊ฒŒ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Claude์—๊ฒŒ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋˜์ง€๊ณ 
๋ฌด์—‡์„ ํ• ์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฃจํ”„๋“ค์„ ๋Œ๋ฆด ๋ฟ์ด๊ณ , ์ œ ์ผ์€ ๊ทธ ๋ฃจํ”„๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค."*
Anthropic์˜ Claude Code ๋ฆฌ๋“œ๊ฐ€ ์ž์‹ ์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด
์‹ค์ฒœ์—๋Š” **loop engineering(๋ฃจํ”„ ์—”์ง€๋‹ˆ์–ด๋ง)** ์ด๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์—ˆ์Šต๋‹ˆ๋‹ค. Yardlet์€
๊ทธ ์‹ค์ฒœ์„ ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ œํ’ˆ์œผ๋กœ ๋งŒ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

- **ํ”„๋กฌํ”„ํŠธ๋Š” ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.** ์˜๋„๋Š” ํ•œ ๋ฒˆ๋งŒ ์ง„์ˆ ํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  ์›Œ์ปค ํ”„๋กฌํ”„ํŠธ๋Š” ๋‹น์‹ ์ด ์†Œ์œ ํ•œ ๊ณ„์•ฝ, ๊ทœ์น™, ์Šคํ‚ฌ, ์—ญํ•  ๊ทœ์œจ, ์ฒดํฌํฌ์ธํŠธ๋กœ๋ถ€ํ„ฐ
๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ž…๋ ฅ์„ ๊ฐœ์„ ํ•˜๋ฉด ๋ฏธ๋ž˜์˜ ๋ชจ๋“  ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ•จ๊ป˜ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.
- **๋ฃจํ”„๋Š” ๋ฒค๋”์˜ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹น์‹ ์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.** ์›Œ์ปค ์ค‘๋ฆฝ(Claude Code, Codex,
๋˜๋Š” ํ•˜๋‚˜์˜ ๊ณ„์•ฝ ๋’ค์— ์žˆ๋Š” ๋ชจ๋“  CLI), ๋กœ์ปฌ(์ƒํƒœ๋Š” ๋‹น์‹ ์˜ ์ €์žฅ์†Œ์— ์กด์žฌ),
๊ทธ๋ฆฌ๊ณ  ํฌ๋ž˜์‹œ, ์žฌ์‹œ์ž‘, ์›Œ์ปค ๊ต์ฒด์—๋„ ์‚ด์•„๋‚จ์Šต๋‹ˆ๋‹ค.
- **๊ฒ€์ฆ์ž๋Š” ๊ฒฐ์ฝ” ์‹คํ–‰์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.** ๊ฒฐ์ •๋ก ์  ํ‰๊ฐ€๊ธฐ๊ฐ€ ๋ชจ๋“  ์‹คํ–‰์„ ๊ณ„์•ฝ๊ณผ
๋Œ€์กฐํ•ด ๊ฒ€์‚ฌํ•˜๊ณ , ์œ„ํ—˜ํ•œ ๊ณ„ํš์—๋Š” ๋ฆฌ๋ทฐ์–ด ์—ญํ• ์˜ ๊ฒ€์ฆ ์ž‘์—…์ด ๋ถ™์Šต๋‹ˆ๋‹ค.
"์™„๋ฃŒ"๋Š” ์Šค์Šค๋กœ ๋ณด๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํš๋“ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๊ณ„์  ๊ฒ€์‚ฌ๋Š”
๊ฒฐ์ •๋ก ์ ์ด๊ณ (์Šคํ‚ค๋งˆยทIDยท์Šค์ฝ”ํ”„ driftยท์‹ค์ œ git diff ๊ธฐ๋ฐ˜ forbidden pathยทYardlet์ด
์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” validation ๋ช…๋ น), ์˜๋ฏธ์  ํ’ˆ์งˆ์€ ๋ณ„๋„ ๋ฆฌ๋ทฐ์–ด ์—ญํ•  ํƒœ์Šคํฌ๊ฐ€
ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค(์ฒด์ปค๊ฐ€ ๋ชจ๋“  ๊ฑธ ํŒ๋‹จํ•˜๋Š” ์ฒ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์ „์ฒด ์ •์ฒด์„ฑ: [docs/identity.md](docs/identity.md).

```
์‚ฌ์šฉ์ž ์˜๋„ (๋ช‡ ๋ฌธ์žฅ)
-> planning gate ์ธํ…ํŠธ / ์Šค์ฝ”ํ”„ / ์ˆ˜์šฉ ๊ณ„์•ฝ
-> work queue ๊ฒฝ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•œ ์ž‘์—…, ์˜์กด์„ฑ, ๋ณ‘๋ ฌ ์ค€๋น„๋จ
-> packet compiler ๋‹น์‹ ์ด ์†Œ์œ ํ•œ ์ƒํƒœ๋กœ๋ถ€ํ„ฐ ๋นŒ๋“œ๋œ ํ”„๋กฌํ”„ํŠธ
-> hidden workers claude / codex / ๋ชจ๋“  CLI, ์ƒŒ๋“œ๋ฐ•์Šค, ๋ผ์šฐํŒ… ๊ฐ€๋Šฅ
-> deterministic evaluator ์™„๋ฃŒ๋Š” ์„ ์–ธ์ด ์•„๋‹ˆ๋ผ ๊ฒ€์‚ฌ๋จ
-> checkpoint / handoff ์ง€์†๋˜๋Š” ์‚ฐ์ถœ๋ฌผ, ์˜์›ํžˆ ์žฌ๊ฐœ ๊ฐ€๋Šฅ
```

## ์„ค์น˜

```bash
cargo install yardlet
```

macOS์™€ Linux์šฉ ์‚ฌ์ „ ๋นŒ๋“œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๊ฐ
[GitHub ๋ฆด๋ฆฌ์Šค](https://github.com/zzunkie/yardlet/releases)์— ์ฒจ๋ถ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
[`cargo-binstall`](https://github.com/cargo-bins/cargo-binstall)์ด ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด
`cargo binstall yardlet`์ด ์ปดํŒŒ์ผ ๋Œ€์‹  ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.

## ๋‹น์‹ ์˜ Claude Code์™€ Codex๋ฅผ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ

`claude` ๋˜๋Š” `codex`๊ฐ€ ๋‹น์‹ ์˜ ๋จธ์‹ ์—์„œ ์‹คํ–‰๋œ๋‹ค๋ฉด Yardlet์ด ๊ทธ๊ฒƒ์„ ๊ตฌ๋™ํ•  ์ˆ˜
์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๊ณ„์ •๋„, ์ถ”๊ฐ€ ์„ค์ •๋„, ๋ณ„๋„์˜ ์…‹์—… ๋‹จ๊ณ„๋„ ์—†์Šต๋‹ˆ๋‹ค. Yardlet์€ ์„ค์น˜๋œ
CLI๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ , ์ค€๋น„ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•˜๊ณ , ๋‹น์‹ ์ด ์ด๋ฏธ ๊ฒฐ์ œํ•œ ๊ทธ๋Œ€๋กœ ์ผ์„ ์‹œํ‚ต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ชจ๋“  ์—์ด์ „ํŠธ CLI๋Š” ์„ค์ •๋งŒ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ("์›Œ์ปค ์ถ”๊ฐ€ํ•˜๊ธฐ" ์ฐธ๊ณ ),
์›Œ์ปค๋ณ„ `invocation.pass_env` ์˜ตํŠธ์ธ์„ ํ†ตํ•œ API ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์›Œ์ปค๊ฐ€ ๋‹น์‹ ์˜ ํ”„๋กœ์ ํŠธ ์•ˆ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด ์…‹์—…์ด ๊ฐ ์ž‘์—… ์•ˆ์—์„œ ๊ทธ๋Œ€๋กœ
๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. `CLAUDE.md`, skills, hooks, MCP ์„œ๋ฒ„, subagents๊ฐ€ ์ „๋ถ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
Yardlet์€ ๋‹น์‹ ์˜ ํ•˜๋„ค์Šค๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ ์œ„์— ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๊ณผ ๊ฒ€์ฆ์„
์–น์Šต๋‹ˆ๋‹ค. LLM ๋ ˆ์ด์–ด์—์„œ ์˜๋ฆฌํ•ด์ง€๋ ค ํ•˜์ง€ ์•Š๊ณ , ๊ทธ ๋ ˆ์ด์–ด๋ฅผ ์ด๋ฏธ ์ž˜ํ•˜๋Š” ํ•˜๋„ค์Šค๋“ค์„
๊ต์ฒด ๊ฐ€๋Šฅํ•œ ์›Œ์ปค๋กœ ๋Œ๋ฆฌ๋ฉฐ, ์ •์ž‘ ๋…ธ๋ ฅ์€ ๋ชจ๋ธ ์—†์ด ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„
(๋ผ์šฐํŒ…ยทํ‰๊ฐ€ยท์ƒํƒœยท๋จธ์ง€ยท๋ณต๊ตฌยทํ•ธ๋“œ์˜คํ”„)์— ์”๋‹ˆ๋‹ค.

์ด๋ฏธ ๊ฒฐ์ œ ์ค‘์ธ ๊ตฌ๋… ์•ˆ์—์„œ ๋Œ๋„๋ก ๋งŒ๋“ค์—ˆ์ง€, ํ† ํฐ๋‹น API ๋น„์šฉ์„ ์Œ“์œผ๋ ค๊ณ  ๋งŒ๋“  ๊ฒŒ
์•„๋‹™๋‹ˆ๋‹ค. ๋นŒ๋ง ํ‚ค(`ANTHROPIC_API_KEY`, `OPENAI_API_KEY` ๋“ฑ)๋Š” ์›Œ์ปค๋ฅผ ๋„์šฐ๊ธฐ ์ „์—
ํ™˜๊ฒฝ์—์„œ ์Šคํฌ๋Ÿฝ๋˜๋ฏ€๋กœ, ๋ฌด์ธ auto-drain์ด ๊ตฌ๋… ๋Œ€์‹  API ํ‚ค๋กœ ์กฐ์šฉํžˆ ๊ณผ๊ธˆ๋˜๋Š” ์ผ์ด
์—†์Šต๋‹ˆ๋‹ค. ํŠน์ • ๋ณ€์ˆ˜๋Š” `pass_env`๋กœ๋งŒ ๋‹ค์‹œ ํ†ต๊ณผ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

## ๋ฃจํ”„

```bash
cd your-project
yardlet new "add admin order search with status, email, and date filters"
yardlet queue # ๊ณ„ํš๋œ ์ž‘์—… ๊ฒ€ํ† 
yardlet run --auto # ํ๋ฅผ ๋น„์›€, ์‚ฌ๋žŒ ๊ฒŒ์ดํŠธ์—์„œ๋งŒ ๋ฉˆ์ถค
yardlet handoff # ๋™๋ฃŒ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์š”์•ฝ ์ฝ๊ธฐ
yardlet # ๋˜๋Š” ํ„ฐ๋ฏธ๋„ UI์—์„œ ์ „๋ถ€ ์ฒ˜๋ฆฌ
```

์›Œ์ปค CLI์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ `yardlet`์€ ์–ด๋–ค ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ๋“  ๋ฐ”๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ช…๋ น์ด
`.agents/` ์ƒํƒœ๋ฅผ ํ•„์š” ์‹œ์ ์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. `yardlet init`์€ ์Šคํฌ๋ฆฝํŒ…์ด๋‚˜ ์žฌ์Šค์บํด๋”ฉ์„
์œ„ํ•ด ์กด์žฌํ•˜์ง€๋งŒ, ๋จผ์ € ์‹คํ–‰ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

ํ•œ ๋ฌธ์žฅ์˜ ์š”์ฒญ์ด ์ธํ…ํŠธ ๊ณ„์•ฝ๊ณผ ๋ช…์‹œ์  ์˜์กด์„ฑ์„ ๊ฐ€์ง„ ๊ฒฝ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•œ ์ž‘์—… ํ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๊ฐ ์ž‘์—…์€ ์ˆจ์€ ์›Œ์ปค๋ฅผ ๊ฑฐ์ณ ์‹คํ–‰๋˜๊ณ , ๊ฒฐ์ •๋ก ์  ํ‰๊ฐ€๊ธฐ๋กœ ๊ฒ€์‚ฌ๋˜๋ฉฐ, `.agents/runs/`
์•„๋ž˜์— ์ฒดํฌํฌ์ธํŠธ์™€ ํ•ธ๋“œ์˜คํ”„๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค.

์ž‘์—…์€ ๋ช…์‹œ์  ๋ชฉํ‘œ ์กฐ๊ฑด๊ณผ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์ดํด ํ•œ๋„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ์ •๋ก ์  ๊ฒ€์ฆ์ด๋‚˜
์ˆ˜์šฉ ์กฐ๊ฑด ๊ฒ€์‚ฌ๊ฐ€ ์‹คํŒจํ•˜๋ฉด Yardlet์€ ์ •ํ™•ํ•œ ์‹คํŒจ๋ฅผ ๊ธฐ๋กํ•ด ๋‹ค์Œ ์‹œ๋„์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
์ €์žฅ๋œ ํ•œ๋„๋ฅผ ์†Œ์ง„ํ•˜๋ฉด ์™„๋ฃŒ๋กœ ๋ณด๊ณ ํ•˜์ง€ ์•Š๊ณ  ๋ฌธ๋งฅ๊ณผ ํ•จ๊ป˜ NeedsUser์—์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.

## ํ”„๋กœ์ ํŠธ ๋ฉ”๋ชจ๋ฆฌ (Project Memory)

์žŠ์–ด๋ฒ„๋ฆฌ๋Š” ๋ฃจํ”„๋Š” ๋ž˜ํผ์ž…๋‹ˆ๋‹ค. Yardlet์€ ์ง€์†๋˜๋Š” ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ง€์‹์„ ๋‹น์‹ ์˜ ์ €์žฅ์†Œ์—
๋ณด๊ด€ํ•˜๊ณ , ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ถ€ํ’€๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ๋ชจ๋“  ์›Œ์ปค์—๊ฒŒ ๊ทธ๊ฒƒ์„ ๊ณต๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค๊ณผ ๊ฒฐ์ •์„ `.agents/memory/` ์•„๋ž˜์— ์ผ๋ฐ˜ Markdown์œผ๋กœ ๋‚จ๊ธฐ์„ธ์š”. ํŒŒ์ผ ํ•˜๋‚˜์— ์‚ฌ์‹ค
ํ•˜๋‚˜, git์œผ๋กœ ์ถ”์ ๋˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ `name` / `description` frontmatter๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
Yardlet์€ ์ด๋ฅผ ๋ฐœ๊ฒฌํ•ด ์งง์€ **์ธ๋ฑ์Šค**๋งŒ ๋ชจ๋“  ์›Œ์ปค ํŒจํ‚ท๊ณผ ํ”Œ๋ž˜๋„ˆ์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฌธ์„œ์˜
์ œ๋ชฉ, ํ•œ ์ค„ ์š”์•ฝ, ๊ฒฝ๋กœ ์•ต์ปค๊ฐ€ ๊ทธ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์€ ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•œ ์›Œ์ปค๊ฐ€ **ํ•„์š” ์‹œ์ ์—**
์ฝ์œผ๋ฏ€๋กœ, ์•„๋ฌด๋ฆฌ ๋งŽ์ด ๊ธฐ๋กํ•ด๋„ ํ•ญ์ƒ ๋กœ๋“œ๋˜๋Š” ๋น„์šฉ์€ ์ž‘๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€
prompt-stuffing์ด ์•„๋‹ˆ๋ผ index-and-anchor์ž…๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” ๊ฐ€๋ฆฌํ‚ค๊ณ , ์›Œ์ปค๋Š” ์ž๊ธฐ ์ž‘์—…์—
๊ด€๋ จ๋œ ์†Œ์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ์—ฝ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์„œ๋Š” `look_at:` ๋žœ๋“œ๋งˆํฌ ๊ฒฝ๋กœ๋ฅผ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. `yardlet memory`๋Š”
์ธ๋ฑ์Šค๋ฅผ ๋‚˜์—ดํ•˜๊ณ , ๋ฌธ์„œ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐฑ์‹ ๋œ ๋’ค ๋žœ๋“œ๋งˆํฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ git์—์„œ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ
๋ฌธ์„œ๋ฅผ **possibly stale(์˜ค๋ž˜๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Œ)** ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž๊ธฐ๊ฐ€ ์„ค๋ช…ํ•˜๋Š”
์ฝ”๋“œ์—์„œ ๋ฉ€์–ด์ง„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์กฐ์šฉํžˆ ์‹ ๋ขฐ๋˜๋Š” ๋Œ€์‹  ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. `yardlet init`์ด ์ปจ๋ฒค์…˜
README์™€ ํ•จ๊ป˜ ์ด ํด๋”๋ฅผ ์Šค์บํด๋”ฉํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ์ง์ ‘ ์†์œผ๋กœ ์“ฐ์ง€ ์•Š๊ณ  ์›Œ์ปค๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฟŒ๋ฆฌ๊ณ  ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
`yardlet memory init`์€ ์›Œ์ปค์—๊ฒŒ ์ €์žฅ์†Œ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์„œ ์ดˆ์•ˆ์„ ๋งŒ๋“ค๊ฒŒ ํ•œ ๋’ค, Yardlet์˜
์ฝ”์–ด๊ฐ€ ์ •๋ณธ `.agents/memory/*.md`๋ฅผ ์”๋‹ˆ๋‹ค(์›Œ์ปค๋Š” ์ดˆ์•ˆ, Yardlet์ด ์œ ์ผํ•œ ๊ธฐ๋ก์ž).
`yardlet memory refresh`๋Š” ๊ธฐ์กด ๋ฌธ์„œ๋ฅผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‹ค์‹œ ์ดˆ์•ˆํ•˜๊ณ ,
`yardlet memory refresh --stale-only`๋Š” possibly stale๋กœ ํ‘œ์‹œ๋œ ๋ฌธ์„œ๋งŒ ์†๋ด…๋‹ˆ๋‹ค.

๋” ๋„“์€ ์ฝ๊ธฐ ์ „์šฉ ์ ๊ฒ€์—๋Š” `yardlet memory scout`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ œ๋ณ„ scout๊ฐ€ ๊ฒฉ๋ฆฌ๋œ
์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ณต์‚ฌ๋ณธ์„ ์‚ดํ”ผ๊ณ  ๋ณด๊ณ ์„œ๋ฅผ ์ ์šฉ ์ „ ํ›„๋ณด๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์‚ฐ์ถœ๋ฌผ์„ ๊ฒ€ํ† ํ•œ ๋’ค
`yardlet memory apply --run `๋กœ ์ฝ”์–ด๊ฐ€ ํ›„๋ณด๋ฅผ ์ •๋ณธ ๋ฉ”๋ชจ๋ฆฌ์— ์“ฐ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. scout๋Š”
์‹ค์ œ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฒฝ๋กœ๋ฅผ ๋ฐ›์ง€ ์•Š์œผ๋ฉฐ ๊ทธ ์ •๋ณธ ์ƒํƒœ๋ฅผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹: [docs/memory-trust-mining.md](docs/memory-trust-mining.md).

## ์‹ ๋ขฐ ๋ฆฌํฌํŠธ (Trust Report)

"์™„๋ฃŒ"๊ฐ€ ๊ฒฐ์ •๋ก ์  ๊ฒŒ์ดํŠธ๋กœ ๊ฒ€์‚ฌ๋˜๊ณ , ๋ชจ๋“  ์‹คํ–‰์ด ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•˜๋ฉฐ, ๋ชจ๋“  ์ž‘์—… ์ƒํƒœ ๋ณ€ํ™”๊ฐ€
๊ธฐ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์—, Yardlet์€ ๋‹น์‹  ์ž์‹ ์˜ ์ด๋ ฅ์œผ๋กœ๋ถ€ํ„ฐ ์ด ๋ฃจํ”„๋ฅผ ์–ผ๋งˆ๋‚˜ ์‹ ๋ขฐํ• ์ง€ ์•Œ๋ ค์ค„ ์ˆ˜
์žˆ์Šต๋‹ˆ๋‹ค. `yardlet trust`๋Š” ์‹คํ–‰ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ์™€ `.agents/transitions/` ์•„๋ž˜์˜ ์ƒํƒœ-์ „์ด
๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์ฝ์–ด ๋‘ ๊ณ„์ธต์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋„ ๋ทฐ(attempt view), ์‹คํ–‰ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜, ํ™œ์„ฑ ์ธํ…ํŠธ๋กœ ์Šค์ฝ”ํ”„ ํ•œ์ •:

- **first-pass Done vs Done-after-retry vs never-Done.** ์ž‘์—…์ด ์žฌ์ž‘์—… ์—†์ด ์ฒซ ์‹œ๋„์—
์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์•ˆ์ฐฉํ•˜๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- **์›Œ์ปค๋ณ„ ์‹ ๋ขฐ๋„**: done-rate, partial / failed / no-result ํšŸ์ˆ˜, ๋ฒฝ์‹œ๊ณ„ ์‹œ๊ฐ„, ๊ทธ๋ฆฌ๊ณ 
๋‹น์‹ ์ด ๊ฒฐ๊ณผ๋ฅผ overrideํ•œ ํšŸ์ˆ˜.
- Done์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ **๊ฐ€์žฅ ๋งŽ์€ ์‹œ๋„**๊ฐ€ ํ•„์š”ํ–ˆ๋˜ ์ž‘์—…๋“ค.

์ž์œจ์„ฑ ๋ทฐ(autonomy view), ์ „์ด ๊ฐ์‚ฌ ๋กœ๊ทธ๋กœ๋ถ€ํ„ฐ ์ ‘ํž˜:

- **์ด Done์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‚˜?** ๋ชจ๋“  Done์„ ๊ธฐ๋ก๋œ ์ด๋ ฅ์œผ๋กœ๋ถ€ํ„ฐ ๋“ฑ๊ธ‰ํ™”ํ•ฉ๋‹ˆ๋‹ค.
evidence-backed(๊นจ๋—ํ•œ Done, ๋‹ค์‹œ ์—ด๋ฆฐ ์  ์—†์Œ), recovered(์ž˜๋ชป๋œ ์ „ํ™˜ ๋’ค์˜ Done),
false-done caught(Done ํ‘œ์‹œ ํ›„ ๋‹ค์‹œ ์—ด๋ฆผ), ๋˜๋Š” unresolved. ๊ทธ๋ฆฌ๊ณ  Done๋“ค์— ๋Œ€ํ•œ
trustworthy-Done ๋น„์œจ.
- **์‚ฌ๋žŒ ๊ฐœ์ž…, ๊ฒฐ์ • vs ์žก๋ฌด(decision vs chore).** ์†์ด ๊ฐ„ ๋‹จ๊ณ„๋ฅผ, ๋ฃจํ”„๊ฐ€ ๋‹น์‹ ์—๊ฒŒ
์ •๋‹นํ•˜๊ฒŒ ๋นš์ง„ ๊ฒฐ์ •๊ณผ, ๋ฃจํ”„๊ฐ€ ์Šค์Šค๋กœ ํก์ˆ˜ํ–ˆ์–ด์•ผ ํ•  ์žก๋ฌด(un-parking, ๋ณต๊ตฌ)๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
์žก๋ฌด ๋น„์ค‘์ด ์ž์œจ์„ฑ ๋ชฉํ‘œ๊ฐ€ 0์œผ๋กœ ๋ชฐ์•„๊ฐ€๋Š” ์ˆซ์ž์ด๋ฉฐ, ์ธํ…ํŠธ๋ณ„๋กœ ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค.
- **๋ถˆํ•„์š”ํ•œ ๋ฃจํ”„ ์ค‘๋‹จ.** ์ง„์งœ ์งˆ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์Šน์ธยท์ผ์‹œ์ •์ง€ ๋งˆ์ฐฐ๋กœ ๋ฉˆ์ถ˜ ๊ฒƒ์„, ์ค„์ผ ์ˆ˜
์žˆ๋Š” ๋‚ญ๋น„๋กœ ์…‰๋‹ˆ๋‹ค.

๋ชจ๋“  ์ˆซ์ž๋Š” ๊ธฐ๋ก๋œ ํŠน์ • ์ „์ด๋‚˜ ์‹คํ–‰์œผ๋กœ ์ถ”์ ๋˜๋ฉฐ, (intent, task) ์ธ์Šคํ„ด์Šค๋ณ„๋กœ ํ‚ค๊ฐ€
๋งค๊ฒจ์ ธ ์ธํ…ํŠธ๋ฅผ ๊ฐ€๋กœ์งˆ๋Ÿฌ ์žฌ์‚ฌ์šฉ๋œ task id๊ฐ€ ๊ฒฐ์ฝ” ํ•œ๋ฐ ํ•ฉ์ณ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
`yardlet trust --json`์€ ์ž์œจ์„ฑ ์ง€ํ‘œ๋ฅผ ๊ธฐ๊ณ„ ํŒ๋… ๊ฐ€๋Šฅํ•œ JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ , ํ„ฐ๋ฏธ๋„ UI๋Š”
๊ฐ™์€ ์ˆซ์ž๋ฅผ **Trust ํŒจ๋„**(`T` ํ‚ค)์— ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ฆฌํฌํŠธ ์ „์ฒด๋Š” ์ฝ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค. ๋ณด๊ณ ํ• 
๋ฟ, ์Šค์Šค๋กœ ๋ผ์šฐํŒ…์ด๋‚˜ ์ •์ฑ…์„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณ„์‚ฐ ์„ธ๋ถ€์‚ฌํ•ญ: [docs/memory-trust-mining.md](docs/memory-trust-mining.md).

## ๊ฒฐ๊ณผ ๋งˆ์ด๋‹ (Outcome Mining)

๊ฐ™์€ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ํ•™์Šต ๋ฃจํ”„๋ฅผ ๋จน์ž…๋‹ˆ๋‹ค. `yardlet harness review`๋Š” ์ž๋™ ํ•™์Šต๋œ ๊ทœ์น™๊ณผ
์Šคํ‚ฌ์„ eval ์ ์ˆ˜์™€ ํ•จ๊ป˜ ๋ณด์—ฌ์ฃผ๊ณ , ๊ทธ ์˜†์— ์ž„๊ณ„๊ฐ’์„ ๋„˜์€ **๋งˆ์ด๋‹๋œ ๊ด€์ฐฐ**์„ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค.
no-result ๋น„์œจ์ด ๋†’์€ ์›Œ์ปค(๊ทœ์น™์œผ๋กœ ๋‹ค๋ฃฐ ๋งŒํ•œ ์ถœ๋ ฅ-๊ณ„์•ฝ ๋ฌธ์ œ), ๋˜๋Š” Done์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€
ํ‰๊ท  ์‹œ๋„ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ์ž‘์—… ์ข…๋ฅ˜(์Šคํ‚ฌ์ด๋‚˜ ๋” ๋‚ ์นด๋กœ์šด ์ˆ˜์šฉ ์กฐ๊ฑด์„ ์›ํ•จ)๊ฐ€ ๊ทธ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ๋“ค์€ **์ œ์•ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.** ๋งˆ์ด๋‹์€ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒฐ์ •๋ก ์  ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ํ•˜๋„ค์Šค ๊ฐœ์„ ์„
์ œ์•ˆํ•˜๊ณ , ๊ทœ์น™ยท์Šคํ‚ฌยท์Šค์ฝ”ํ”„ ๋ณ€๊ฒฝ์€ ๋‹น์‹ ์ด ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ๋Š” ์Šค์Šค๋กœ ํ•˜๋„ค์Šค๋ฅผ
๋‹ค์‹œ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฃจํ”„๊ฐ€ ๋ณต๋ฆฌ๋กœ ์Œ“์ด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ•œ ์‹คํ–‰์˜ ๊ฒฐ์ •๋ก ์  ๊ฒฐ๊ณผ๊ฐ€
๋‹ค์Œ ์‹คํ–‰์„ ๋” ๋‚ ์นด๋กญ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฐ€์ด๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ž„๊ณ„๊ฐ’: [docs/memory-trust-mining.md](docs/memory-trust-mining.md).

## ํ„ฐ๋ฏธ๋„ UI ๋‹จ์ถ•ํ‚ค

ํ„ฐ๋ฏธ๋„ UI(`yardlet`๋ฅผ ์„œ๋ธŒ๋ช…๋ น ์—†์ด ์‹คํ–‰)๊ฐ€ ์„ธ์…˜์„ ๋‹ค๋ฃจ๋Š” ์ฃผ๋œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Home
ํ™”๋ฉด์—์„œ:

| ํ‚ค | ๋™์ž‘ |
| --- | --- |
| `n` | ์ƒˆ ์ž‘์—…: ์š”์ฒญ ์ž…๋ ฅ (idle์ผ ๋•Œ). |
| `r` | ๋‹ค์Œ ์ž‘์—… ์‹คํ–‰. |
| `A` | ํ ์ž๋™ ๋น„์šฐ๊ธฐ(auto-drain). |
| `t` | Tidy: ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒํƒœ ์ž๊ฐ€ ์น˜์œ  (์˜ค๋ž˜๋œ ๊ฒŒ์ดํŠธ ์ด๊ด€, ์‹คํ–‰ ๋ถˆ๊ฐ€ ์ž‘์—… defer, ์†Œ์ง„๋œ ์ธํ…ํŠธ ๋งˆ๋ฌด๋ฆฌ). |
| `p` | ๋‹ค์Œ ์ž‘์—… ์Šน์ธ. ๋“œ๋ ˆ์ธ ์ค‘์—๋Š” graceful pause ์š”์ฒญ. |
| `a` | ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—…(NeedsUser)์˜ Answer ์—ด๊ธฐ. ์›Œ์ปค ์ถœ๋ ฅ๊ณผ ๋Œ€ํ™” ๋ฌธ๋งฅ์„ ํ•จ๊ป˜ ํ‘œ์‹œ. |
| `d` | ์„ ํƒํ•œ ์ž‘์—…์„ ๊ฒฐ์ •์œผ๋กœ defer. |
| `v` | ์„ ํƒํ•œ Deferred ์ž‘์—…์„ revive. |
| `Esc` | ์‹คํ–‰ ์ค‘์ธ ์›Œ์ปค ์ค‘์ง€. |
| `โ†‘` / `โ†“` | ํ ํƒ์ƒ‰, ๋์„ ์ง€๋‚˜๋ฉด ์›Œ์ปค ํŒจ๋„. |
| `Enter` | ์„ ํƒํ•œ ์ž‘์—…์˜ ๋‹ค์Œ ๋™์ž‘ ์‹คํ–‰ (run / answer / ์Šน์ธ ํžŒํŠธ / monitor / handoff), ๋˜๋Š” ํ๋ฅผ ์ง€๋‚˜ ์›Œ์ปค ํ† ๊ธ€. |
| `Space` / `Enter` | (์›Œ์ปค ํŒจ๋„์—์„œ) ์„ ํƒํ•œ ์›Œ์ปค on/off ํ† ๊ธ€. |
| `i` | intent ๊ณ„์•ฝ ๋ณด๊ธฐ. |
| `h` | ์ตœ์‹  handoff ๋ณด๊ธฐ. |
| `T` | ์‹ ๋ขฐยท์ž์œจ์„ฑ ํŒจ๋„ (`yardlet trust`์™€ ๊ฐ™์€ ์ˆซ์ž). |
| `R` | ๋ฆฌํฌํŠธ/ํžˆ์Šคํ† ๋ฆฌ ๋ธŒ๋ผ์šฐ์ €. |
| `m` | ์›Œ์ปค ์‹ค์‹œ๊ฐ„ ์ถœ๋ ฅ(Monitor). |
| `s` | ์„ค์ • (์‹คํ–‰ ์ค‘์—๋„ ์—ด ์ˆ˜ ์žˆ์Œ). |
| `g` | ์ƒˆ๋กœ๊ณ ์นจ, ์›Œ์ปค readiness ์žฌprobe. |
| `l` | ์–ธ์–ด ํ† ๊ธ€. |
| `f` | ์ ‘๊ทผ ์ˆ˜์ค€ ํ† ๊ธ€ (sandboxed / full). |
| `u` | ์„ค์น˜๋œ ์—…๋ฐ์ดํŠธ๋ณธ์œผ๋กœ ์žฌ์‹œ์ž‘ (๊ฐ€๋Šฅํ•  ๋•Œ). |
| `q` / `Ctrl+C` | ์ข…๋ฃŒ. |

ํ•œ๊ธ€ ์žํŒ์—์„œ๋„ ์˜์–ด๋กœ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค: ํ•œ๊ธ€ ์ž๋ชจ๊ฐ€ ๊ฐ™์€ ๋‹จ์ถ•ํ‚ค์—
๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

## ๋ช…๋ น์–ด

| ๋ช…๋ น์–ด | ์šฉ๋„ |
| --- | --- |
| `yardlet` | ํ„ฐ๋ฏธ๋„ UI ์—ด๊ธฐ (์ตœ์ดˆ ์‚ฌ์šฉ ์‹œ ์ž๋™ ์ดˆ๊ธฐํ™”). |
| `yardlet init [--force]` | `.agents/` ์ƒํƒœ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์Šค์บํด๋”ฉ (์„ ํƒ). |
| `yardlet new "" [--worker ]` | ์š”์ฒญ์„ ์ธํ…ํŠธ ๊ณ„์•ฝ + ํ๋กœ ๊ณ„ํš. |
| `yardlet goal "" [--verify "..."]` | ์ต์Šคํ”„๋ ˆ์Šค ๋ ˆ์ธ: ๊ณ„ํš์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ํ•˜๋‚˜์˜ ๋ชฉํ‘œ๋ฅผ ๊ฒ€์ฆ ์กฐ๊ฑด๊นŒ์ง€ ์‹คํ–‰. |
| `yardlet new "..." --image ` | ๋กœ์ปฌ ์ด๋ฏธ์ง€๋ฅผ ๋ชฉํ‘œ์— ์ฒจ๋ถ€ (์š”์ฒญ์—์„œ ์ž๋™ ๊ฐ์ง€๋„ ๋จ). |
| `yardlet add "" [--depends-on ]` | ์žฌ๊ณ„ํš ์—†์ด ์‚ฌ์šฉ์ž ์ž‘์„ฑ ์ž‘์—…์„ ํ˜„์žฌ ํ์— ์ถ”๊ฐ€. |
| `yardlet queue` | ์ž‘์—… ํ ๋‚˜์—ด. |
| `yardlet tidy` | ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒํƒœ ์ž๊ฐ€ ์น˜์œ : ์˜ค๋ž˜๋œ ๊ฒŒ์ดํŠธ ์ด๊ด€, ์‹คํ–‰ ๋ถˆ๊ฐ€ ์ž‘์—… defer, ์†Œ์ง„๋œ ์ธํ…ํŠธ ์•„์นด์ด๋ธŒ. |
| `yardlet status [--json]` | ์›Œํฌ์ŠคํŽ˜์ด์Šค, ์ธํ…ํŠธ, ํ, ์›Œ์ปค ์š”์•ฝ. |
| `yardlet worker status` | ์›Œ์ปค ์ค€๋น„ ์ƒํƒœ ๋ฐ ๋นŒ๋ง-env ์•ˆ์ „์„ฑ. |
| `yardlet inspect repo [--json]` | ์ €๋ ดํ•œ ๊ฒฐ์ •๋ก ์  ๋กœ์ปฌ ์ฆ๊ฑฐ. |
| `yardlet packet --task --worker [--dry-run]` | ์›Œ์ปค ํŒจํ‚ท ์ปดํŒŒ์ผ. |
| `yardlet run --next [--execute] [--worker ]` | ๋‹ค์Œ ์ž‘์—… ์ค€๋น„(๊ธฐ๋ณธ) ๋˜๋Š” ์‹คํ–‰. |
| `yardlet run --auto [--parallel N]` | ํ๋ฅผ ์ž์œจ์ ์œผ๋กœ ๋น„์›€; ์„ ํƒ์ ์œผ๋กœ N๊ฐœ ๋™์‹œ ์‹คํ–‰. |
| `yardlet answer ""` | ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—…(NeedsUser)์— ๋‹ตํ•˜๊ณ  ์žฌ๊ฐœ. |
| `yardlet approve ` | ๊ฒŒ์ดํŠธ๋œ ์ž‘์—…์— ๋‹จ๋ฐœ์„ฑ ์Šน์ธ ๋ถ€์—ฌ. |
| `yardlet defer [reason]` | ์ž‘์—… ํ•˜๋‚˜๋ฅผ ๊ฒฐ์ •์œผ๋กœ ๋”ฐ๋กœ ์น˜์›Œ๋‘  (Deferred: ๋Œ€๊ธฐ๋„ ์™„๋ฃŒ๋„ ์•„๋‹˜). |
| `yardlet defer --cascade [reason]` | ๊ทธ ๋’ค์— ์ขŒ์ดˆ๋œ queued ์ž‘์—…๊นŒ์ง€ ์ „์ด์ ์œผ๋กœ ํ•จ๊ป˜ deferํ•˜๊ณ  ํ•˜๋‚˜์˜ revive ๊ทธ๋ฃน์œผ๋กœ ๊ธฐ๋ก. |
| `yardlet revive [--group]` | Deferred ์ž‘์—…์„ Queued๋กœ ๋˜์‚ด๋ฆผ; `--group`์€ ํ•จ๊ป˜ ๊ธฐ๋ก๋œ cascade ๊ทธ๋ฃน์„ ๋˜์‚ด๋ฆผ. |
| `yardlet access ` | ๊ธฐ๋ณธ ์›Œ์ปค ๊ถŒํ•œ ์ˆ˜์ค€ ์„ค์ •. |
| `yardlet handoff` | ์ตœ์‹  ์‹คํ–‰์˜ ํ•ธ๋“œ์˜คํ”„ ์ถœ๋ ฅ. |
| `yardlet report` | ์ธํ…ํŠธ์˜ ์ตœ์ข… ๋ฆฌํฌํŠธ ์ถœ๋ ฅ (๋ชจ๋“  ์ž‘์—…์˜ ์ง‘๊ณ„). |
| `yardlet memory [init \| refresh [--stale-only]]` | ํ”„๋กœ์ ํŠธ ๋ฉ”๋ชจ๋ฆฌ ์ธ๋ฑ์Šค ๋‚˜์—ด(์˜ค๋ž˜๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ ํ‘œ์‹œ); `init`/`refresh`๋Š” ์›Œ์ปค๊ฐ€ ์ดˆ์•ˆํ•œ ๋ฌธ์„œ๋ฅผ Yardlet ์ฝ”์–ด๊ฐ€ ๊ธฐ๋ก. |
| `yardlet memory scout` / `yardlet memory apply --run ` | ๊ฒฉ๋ฆฌ ๋ณต์‚ฌ๋ณธ์„ ๋ณ‘๋ ฌ๋กœ ์ ๊ฒ€ํ•ด ์ ์šฉ ์ „ ๋ฉ”๋ชจ๋ฆฌ ํ›„๋ณด๋ฅผ ๋งŒ๋“ค๊ณ  ์ฝ”์–ด ๊ธฐ๋ก์ž๋ฅผ ํ†ตํ•ด ์ ์šฉ. |
| `yardlet watch [--interval N] [--until CONDITION] [--max-runs N] [--max-seconds N] [-- ]` | ๋กœ์ปฌ ๋ช…๋ น์ด๋‚˜ ๊ฒฝ๋กœ๋ฅผ foreground์—์„œ ์ œํ•œ๋œ ์กฐ๊ฑด๊นŒ์ง€ ๊ด€์ฐฐ. |
| `yardlet eval fixtures [--json] [--fixture ]` | ๊ฒฉ๋ฆฌ๋œ ๊ฒฐ์ •๋ก ์  ๋ฉ”์ปค๋‹ˆ์ฆ˜ fixture ์‹คํ–‰. ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด non-zero๋กœ ์ข…๋ฃŒ. |
| `yardlet trust [--json]` | ์‹คํ–‰ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ์™€ ์ „์ด ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ์‹ ๋ขฐ+์ž์œจ์„ฑ ๋ฆฌํฌํŠธ (์ฝ๊ธฐ ์ „์šฉ); `--json`์€ ์ง€ํ‘œ๋ฅผ ๋‚ด๋ณด๋ƒ„. |
| `yardlet recover` | ์ค‘๋‹จ๋œ ์„ธ์…˜์—์„œ ์ƒํƒœ ๋ณต๊ตฌ (๊ณ ์•„ ์‹คํ–‰, ๋ฏธํ™•์ธ ๊ณ„ํš). |
| `yardlet skill list / suggest / equip / unequip / research / create / apply / review` | ์ €์žฅ์†Œ ๋ถ„๋ฅ˜, managed 11-skill catalog ์‚ฌ์šฉ, ์Šคํ‚ฌ ์žฅ์ฐฉยท์ž‘์„ฑยท์ ์ˆ˜ํ™”. Core skill์€ ์™ธ๋ถ€ library ์—†์ด ์„ค์น˜๋˜๊ณ  overlay๋Š” task ๋ฒ”์œ„์—์„œ๋งŒ ํ™œ์„ฑํ™”. |
| `yardlet harness review` | ์ž๋™ ํ•™์Šต๋œ ๊ทœ์น™๊ณผ ์Šคํ‚ฌ์„ eval ์ ์ˆ˜์™€ ํ•จ๊ป˜ ํ‘œ์‹œ, ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ด๋‹๋œ ๊ฐœ์„  ํ›„๋ณด. |
| `yardlet rubric drift / sync [--adopt-text]` | ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฃจ๋ธŒ๋ฆญ์ด ํ…œํ”Œ๋ฆฟ์— ์–ผ๋งˆ๋‚˜ ๋’ค์ฒ˜์กŒ๋Š”์ง€ ์ง„๋‹จํ•˜๊ณ  ๊ฐœ์„ ์„ ๋ณ‘ํ•ฉ (๋น„ํŒŒ๊ดด์ ). |
| `yardlet routing review` | ์ž‘์—… ์ข…๋ฅ˜๋ณ„ ์›Œ์ปค ์„ฑ๊ณต ํ†ต๊ณ„ + ์ œ์•ˆ ์„ ํ˜ธ๋„. |
| `yardlet routing apply --kind K --worker W` | ์ž‘์—… ์ข…๋ฅ˜์— ์›Œ์ปค ๊ณ ์ • (์‚ฌ๋žŒ ์Šน์ธ). |

์›Œ์ปค๊ฐ€ ์ž…๋ ฅ์ด ํ•„์š”ํ•  ๋•Œ ์ž‘์—…์„ ์งˆ๋ฌธ๊ณผ ํ•จ๊ป˜ **NeedsUser** ์ƒํƒœ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค.
`yardlet status`(๋ฐ TUI)๊ฐ€ ์งˆ๋ฌธ์„ ๋ณด์—ฌ์ฃผ๋ฉฐ, `yardlet answer "..."`(๋˜๋Š” TUI์—์„œ `a`)๋กœ
๋‹ตํ•˜๋ฉด Yardlet์ด ๋‹น์‹ ์˜ ๋‹ต์„ ๋ฐ˜์˜ํ•ด ์ž‘์—…์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. TUI Answer ํ™”๋ฉด์€ ํ˜„์žฌ
์ธํ…ํŠธ์˜ ์›Œ์ปค ์ถœ๋ ฅ๊ณผ ๊ด€๋ จ ๋Œ€ํ™”๋ฅผ ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋ฉฐ, ์ถœ๋ ฅ์ด ์—†์œผ๋ฉด ์ปดํŒฉํŠธ ์š”์•ฝ์„
๋Œ€์‹  ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

## ์–ธ์–ด

์›Œ์ปค๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ๋‚ด์šฉ(๊ณ„ํš ์š”์•ฝ, ์ž‘์—… ์ œ๋ชฉ, ํ•ธ๋“œ์˜คํ”„, ์งˆ๋ฌธ)์€ ๋‹น์‹ ์˜ ์–ธ์–ด๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ Yardlet์€ ์š”์ฒญ์—์„œ ์–ธ์–ด๋ฅผ ์ž๋™ ๊ฐ์ง€ํ•˜๋ฏ€๋กœ, ํ•œ๊ตญ์–ด ์š”์ฒญ์—๋Š” ํ•œ๊ตญ์–ด ๊ณ„ํš๊ณผ
ํ•ธ๋“œ์˜คํ”„๊ฐ€ ๋‚˜์˜ค๊ณ  ์ฝ”๋“œ์™€ ์‹๋ณ„์ž๋Š” ์˜์–ด๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋กœ ๊ฐ•์ œํ•˜๋ ค๋ฉด
`.agents/yardlet.yaml`์˜ `language:`๋ฅผ `ko`/`en` ๋“ฑ์œผ๋กœ ์„ค์ •ํ•˜์„ธ์š”.

## ๊ถŒํ•œ

์›Œ์ปค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒฝ๊ณ„๊ฐ€ ์žˆ๋Š” ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(๋กœ์ปฌ ํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ๋งŒ,
๋„คํŠธ์›Œํฌ ์—†์Œ). ์ด๋Š” ๊ณ„์ธต์ ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

1. **๊ธฐ๋ณธ์ด ์•ˆ์ „**: codex `workspace-write`, claude `acceptEdits`.
2. **์šฐํšŒ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ณด๊ณ **: ์›Œ์ปค๊ฐ€ ๋„คํŠธ์›Œํฌ, ์„ค์น˜, ํ”„๋กœ๋•์…˜, ๋˜๋Š” ํŒŒ๊ดด์  ๋™์ž‘์ด
ํ•„์š”ํ•˜๋ฉด ์กฐ์šฉํžˆ ์‹คํŒจํ•˜์ง€ ์•Š๊ณ  **NeedsUser**๋กœ ๋ฉˆ์ถ”๊ณ  ๋ฌป์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ ‘๊ทผ์„
ํ—ˆ์šฉํ•˜๊ณ  ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
3. **๋ช…์‹œ์  ์—์Šค์ปฌ๋ ˆ์ด์…˜**: `yardlet run --next --execute --full-access`(๋˜๋Š”
`yardlet answer --full-access`)๋Š” ๊ทธ ์‹คํ–‰์— ํ•œํ•ด ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์€
๊บผ์ ธ ์žˆ์œผ๋ฉฐ, ์ž๋™์ด ์•„๋‹ˆ๋ผ ์‚ฌ๋žŒ์ด ๋ถ€์—ฌํ•˜๋Š” ๊ถŒํ•œ์ž…๋‹ˆ๋‹ค.

## ์›Œ์ปค ๋ผ์šฐํŒ…

ํ”Œ๋ž˜๋„ˆ๋Š” `.agents/workers.yaml`์˜ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ฃจ๋ธŒ๋ฆญ(๊ฐ ์›Œ์ปค์˜ `best_for` +
`cost_bias` ๋‹ค์ด์–ผ)์— ๋”ฐ๋ผ ์ž‘์—…๋ณ„ ์›Œ์ปค๋ฅผ ๊ณ ๋ฆ…๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ์ ์˜ ์„ ํƒ์€ ๊ฒฐ์ •๋ก ์ ์ž…๋‹ˆ๋‹ค.
์„ ํ˜ธ ์›Œ์ปค -> ์ค€๋น„ ์ƒํƒœ ์ ๊ฒ€ -> ์ค€๋น„๋œ ๋‹ค์Œ ์›Œ์ปค๋กœ ํด๋ฐฑ. ๋ชจ๋“  ์‹คํ–‰์€ ๊ฒฐ๊ณผ๋ฅผ
`.agents/telemetry/runs.jsonl`์— ๊ธฐ๋กํ•˜๋ฉฐ, `yardlet routing review`๊ฐ€ ์ด๋ฅผ ์ง‘๊ณ„ํ•ด
ํ”„๋กœํ•„ ๋ณ€๊ฒฝ์„ *์ œ์•ˆ*ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: "claude-code๊ฐ€ ๋ฆฌํŒฉํ„ฐ์—์„œ ์ด๊ธด๋‹ค"). ์ด๋ฅผ
`yardlet routing apply`๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ๋Š” ์Šค์Šค๋กœ ๋ผ์šฐํŒ…์„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์„ค๊ณ„: [docs/routing-and-telemetry.md](docs/routing-and-telemetry.md).

`run --next`๋Š” ์‹คํ–‰์„ ์ค€๋น„ํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์›Œ์ปค๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ *์ „์—* ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ๊ตฌ๋…
๊ธฐ๋ฐ˜ ์›Œ์ปค๋ฅผ ๋„์šฐ๋ฉด ์‚ฌ์šฉ๋Ÿ‰์ด ์†Œ๋น„๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด `--execute`๋ฅผ
์ „๋‹ฌํ•˜์„ธ์š”.

์›Œ์ปค๋Š” Home ์›Œ์ปค ํŒจ๋„์—์„œ ์ผœ๊ณ  ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ๋ฅผ ์ง€๋‚˜ ํ™”์‚ดํ‘œ ํ‚ค, ๊ทธ๋‹ค์Œ
Enter/Space). ๋น„ํ™œ์„ฑํ™”๋œ ์›Œ์ปค๋Š” ๋ผ์šฐํŒ…๊ณผ ๊ณ„ํš์—์„œ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

### ์›Œ์ปค ์ถ”๊ฐ€ํ•˜๊ธฐ

Codex์™€ Claude Code๋Š” ๋‚ด์žฅ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ตฌ๋… ๊ธฐ๋ฐ˜ CLI๋Š”
`.agents/workers.yaml`๋งŒ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ถœ ํ…œํ”Œ๋ฆฟ์„ ์ฃผ๋ฉด Yardlet์ด ๋™์ผํ•œ
๊ณ„์•ฝ(stdin์œผ๋กœ ํŒจํ‚ท -> ๊ฒฐ๊ณผ ํŒŒ์ผ ์ถœ๋ ฅ)์„ ํ†ตํ•ด ๊ทธ๊ฒƒ์„ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์Šคํ™€๋”:
`{run_dir}`, `{model}`, `{effort}`, `{image}`.

```yaml
- id: mytool
best_for: "..." # ํ”Œ๋ž˜๋„ˆ ๋ฃจ๋ธŒ๋ฆญ
invocation:
command: mytool # --version ์ง€์› ํ•„์š” (์ค€๋น„ ์ƒํƒœ ํ”„๋กœ๋ธŒ)
supports_noninteractive: true
args: ["run", "--json", "--out", "{run_dir}"]
sandbox_args: ["--sandbox"] # ๊ธฐ๋ณธ ์ ‘๊ทผ ์ˆ˜์ค€
full_access_args: ["--yolo"] # ํ’€ ์•ก์„ธ์Šค๊ฐ€ ํ—ˆ์šฉ๋  ๋•Œ๋งŒ
model_args: ["--model", "{model}"] # ๋ชจ๋ธ์ด ์„ค์ •๋˜๋ฉด ์ถ”๊ฐ€๋จ
effort_args: ["--effort", "{effort}"]
image_args: ["-i", "{image}"] # ์ฒจ๋ถ€ ์ด๋ฏธ์ง€๋งˆ๋‹ค ๋ฐ˜๋ณต๋จ
```

์›Œ์ปค๋Š” ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๊ฒƒ์ด ๊ฒฐ๊ณผ๊ฐ€ ๋Œ์•„์˜ค๋Š”
๋ฐฉ์‹์ž…๋‹ˆ๋‹ค). ๊ทธ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค env๋Š” ํ”„๋กœํ•„์ด `pass_env`๋กœ ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ์˜ตํŠธ์ธํ•˜์ง€
์•Š๋Š” ํ•œ ์ •ํ™”๋ฉ๋‹ˆ๋‹ค.

์ƒํƒœ๊ณ„์˜ ์—์ด์ „ํŠธ๋“ค์ด Yardlet์˜ ๊ณต๊ธ‰ ์ธก์ž…๋‹ˆ๋‹ค.
[oh-my-pi](https://github.com/can1357/oh-my-pi)(`omp`), OpenCode, Gemini CLI,
๋˜๋Š” ๋‹น์‹ ์ด ๋งŒ๋“  API ๊ธฐ๋ฐ˜ CLI ๊ฐ™์€ ํ„ฐ๋ฏธ๋„ ์—์ด์ „ํŠธ ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ์— ๋งž์Šต๋‹ˆ๋‹ค.
์Šน์ž๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ž‘์—…๋ณ„๋กœ ๊ต์ฒดํ•˜๊ณ , ๊ธฐ๋ก์„ ์œ ์ง€ํ•˜์„ธ์š”.

## ์—ญํ•  ํ”„๋กœํ•„

๊ฐ ์ž‘์—…์€ ์—ญํ•  ์•„๋ž˜์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ž‘์—… ์ข…๋ฅ˜์—์„œ ํŒŒ์ƒ๋œ, ์›Œ์ปค ์œ„์— ์–น๋Š” ํ”„๋กฌํ”„ํŠธ
๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. `implementation` -> **builder**, `review` -> **reviewer**,
`research` -> **researcher**, `safety` -> **security**. ๊ฐ™์€ Codex/Claude ์„ธ์…˜์ด
์—ญํ• ๋ณ„ ์ž‘์—… ๊ทœ์น™์„ ๋ฐ›์Šต๋‹ˆ๋‹ค(๋ฆฌ๋ทฐ์–ด๋Š” file:line ์ฆ๊ฑฐ๋ฅผ ์ธ์šฉํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์“ฐ์ง€
์•Š์œผ๋ฉฐ, ๋ฆฌ์„œ์ฒ˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ๋ณด์•ˆ์€ ์ ๋Œ€์ ์œผ๋กœ ๊ฐ์‚ฌํ•˜๋ฉฐ ๋น„๋ฐ€ ๊ฐ’์„ ๊ฒฐ์ฝ”
์ถœ๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ณ„๋กœ ์—ญํ• ์„ ํ™•์žฅํ•˜๋ ค๋ฉด `.agents/agents/.md`๋ฅผ
์ž‘์„ฑํ•˜์„ธ์š”. ํ•ด๋‹น ์—ญํ• ์˜ ํŒจํ‚ท์— ๋ง๋ถ™์—ฌ์ง‘๋‹ˆ๋‹ค.

## ๋ณ‘๋ ฌ ์‹คํ–‰

ํ”Œ๋ž˜๋„ˆ๋Š” ์–ด๋–ค ์ž‘์—…์ด ์ง„์งœ๋กœ ์„œ๋กœ ์˜์กดํ•˜๋Š”์ง€(`depends_on`) ํ‘œ์‹œํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘
๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ์„ ์ผœ๋ฉด ์ž๋™ ๋“œ๋ ˆ์ธ์ด ๋…๋ฆฝ ์ž‘์—…์„ ์ตœ๋Œ€ N๊ฐœ๊นŒ์ง€ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋ฉฐ,
๊ฐ๊ฐ `yard/` ๋ธŒ๋žœ์น˜์˜ ์ž์ฒด git worktree์—์„œ, ์„œ๋กœ ๋‹ค๋ฅธ ์›Œ์ปค์—์„œ ์‹คํ–‰๋  ์ˆ˜๋„
์žˆ์Šต๋‹ˆ๋‹ค. ์›Œ์ปค๋Š” ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜์ง€๋งŒ ํ ์ƒํƒœ๋Š” ๋‹จ์ผ ์ž‘์„ฑ์ž๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๊ฒฐ๊ณผ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ
๋จธ์ง€๋ฉ๋‹ˆ๋‹ค. ๋จธ์ง€ ์ถฉ๋Œ์€ ์ ˆ๋Œ€ ์ž๋™ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ž‘์—…์€ Partial๋กœ ๋–จ์–ด์ง€๊ณ 
worktree๋Š” ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ๋ณด์กด๋ฉ๋‹ˆ๋‹ค). ๊ธฐ๋ณธ์€ ๊บผ์ ธ ์žˆ๊ณ , Settings("Parallel tasks"),
`.agents/yardlet.yaml`์˜ `max_parallel`, ๋˜๋Š” `yardlet run --auto --parallel 3`์œผ๋กœ
์˜ตํŠธ์ธํ•ฉ๋‹ˆ๋‹ค. ๊นจ๋—ํ•œ git ํŠธ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Yardlet์€ ์ˆœ์ฐจ ์‹คํ–‰์œผ๋กœ
ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ๋‚ด๋ถ€์—์„œ ์›Œ์ปค๋Š” ์ž์œ ๋กญ๊ฒŒ ์ž์‹ ์˜ ์„œ๋ธŒ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Yardlet์˜
ํ ๋ณ‘๋ ฌ์„ฑ์€ ์„ธ์…˜์„ ๋„˜์–ด ์‚ด์•„๋‚จ๊ณ , ์›Œ์ปค๋ฅผ ๊ฐ€๋กœ์ง€๋ฅด๊ณ , ์‚ฌ๋žŒ ๊ฒŒ์ดํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š”
์ž‘์—…์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ค๊ณ„: [docs/parallel-queue.md](docs/parallel-queue.md).

## Git ๋งˆ๋ฌด๋ฆฌ

์ž๋™ push๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•˜๋Š” ๋ณ„๋„์˜ ์™„๋ฃŒ ์ •์ฑ…์ด๋ฉฐ ๊ธฐ๋ณธ์€ ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
`yardlet init`์€ ๋ช…์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋œ ๋ธ”๋ก์„ ์ž‘์„ฑํ•˜๊ณ , ์ด ๋ธ”๋ก์ด ์—†๋Š” ๊ธฐ์กด
์›Œํฌ์ŠคํŽ˜์ด์Šค๋„ ๋น„ํ™œ์„ฑ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ์žˆ๋Š” remote, ์™„์ „ํ•œ branch ref,
๊ทธ๋ฆฌ๊ณ  ํ†ต๊ณผํ•ด์•ผ ํ•  ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์‚ฌ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

```yaml
git_finish:
auto_push: false
remote: safe-remote
target_ref: refs/heads/main
pre_push_checks:
- name: format
command: cargo fmt --check
- name: tests
command: cargo test
```

์ด ์ •์ฑ…์„ ๊ฒ€ํ† ํ•œ ๋’ค `auto_push: true`๋กœ ๋ฐ”๊พธ๋ฉด ์˜ตํŠธ์ธ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์ž„์˜์˜ commit์ด
push ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Yardlet์€ worktree ๊ธฐ์ค€์ ๊ณผ ํ•ด๋‹น run์ด ๋งŒ๋“  ์ •ํ™•ํ•œ commit
์ง‘ํ•ฉ์„ ๊ธฐ๋กํ•˜๊ณ , ๊ธฐ์ค€์ ์—์„œ ์ƒˆ๋กœ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ commit์ด ๊ทธ ์†Œ์œ  ์ง‘ํ•ฉ๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์„ ๋•Œ๋งŒ
ํ†ตํ•ฉ OID๋ฅผ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. remote ๋Œ€์ƒ๋„ ์—ฌ์ „ํžˆ ๊ธฐ์ค€์ ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ hook,
๋‹ค๋ฅธ ์„ธ์…˜ ๋˜๋Š” ๋กœ์ปฌ ์ž๋™ํ™”๊ฐ€ ์ถœ์ฒ˜ ๋ถˆ๋ช… commit์„ ๋ผ์›Œ ๋„ฃ์œผ๋ฉด push ์ „์— fail-closed๋กœ
์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

๊ฐ™์€ Git common directory, remote, target ref๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ์‹คํ–‰์€ ์ œํ•œ ์‹œ๊ฐ„์ด ์žˆ๋Š”
๋กœ์ปฌ lock์œผ๋กœ ์ง๋ ฌํ™”๋ฉ๋‹ˆ๋‹ค. lock์„ ์žก์€ ๋™์•ˆ ํ˜„์žฌ branch์™€ `HEAD`๊ฐ€ target ๋ฐ ์†Œ์œ 
OID์™€ ์ผ์น˜ํ•˜๊ณ , push ๋ชฉ์ ์ง€๊ฐ€ ํ•˜๋‚˜์ด๋ฉฐ, `.agents/` ๋ฐ–์— ๋ณ€๊ฒฝ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋‹ค์Œ
์„ค์ • ๊ฒ€์‚ฌ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์‚ฌ ํ›„์—๋Š” `HEAD`, worktree, fetch/push ๋ชฉ์ ์ง€์™€
remote target ref๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜๋ฉฐ, ๋™์‹œ ๋ณ€๊ฒฝ์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด push 0ํšŒ๋กœ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.

push๋Š” ํ•ญ์ƒ ๋ช…์‹œ์ ์ธ `:` refspec์ž…๋‹ˆ๋‹ค. force,
force-with-lease, ref ์‚ญ์ œ, history rewrite ๊ฒฝ๋กœ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ๋’ค Yardlet์€ ๋ณ„๋„์˜
`git ls-remote --refs` ์กฐํšŒ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  remote OID๊ฐ€ ๊ณ ์ •๋œ ์˜ˆ์ƒ OID์™€ ๊ฐ™์„ ๋•Œ๋งŒ ์„ฑ๊ณต์„
๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋งˆ๋ฌด๋ฆฌ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ์ถ”๊ฐ€ push ์—†์ด `already_applied`๋กœ ์ˆ˜๋ ดํ•ฉ๋‹ˆ๋‹ค.

`auto_push: true`์ผ ๋•Œ๋Š” `pushed`์™€ ๋…๋ฆฝ ๊ฒ€์ฆ๋œ `already_applied`๋งŒ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ๋ฐ–์˜ ๋ชจ๋“  ๋งˆ๋ฌด๋ฆฌ ์ƒํƒœ๋Š” ์ž‘์—…, ๋ด‰์ธ๋œ `run.yaml`, telemetry, ์ตœ์ข… ๋ฆฌํฌํŠธ์™€ Trust
์ง‘๊ณ„์—์„œ ๋ฏธ์™„๋ฃŒ `Partial`๋กœ ํˆฌ์˜๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋น„ํ™œ์„ฑ ์ •์ฑ…์—์„œ๋Š” `disabled`๊ฐ€ ํ•„์ˆ˜
๋งˆ๋ฌด๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ผ๋ฐ˜ ์ž‘์—… ์™„๋ฃŒ ๋ฐฉ์‹์€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

| ๊ธฐ๋ก ์ƒํƒœ | ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ์˜๋ฏธ |
|---|---|
| `pushed` | ์ •ํ™•ํ•œ OID๊ฐ€ push๋˜๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒ€์ฆ๋์Šต๋‹ˆ๋‹ค. |
| `already_applied` | remote์— ์ด๋ฏธ ์ •ํ™•ํ•œ OID๊ฐ€ ์žˆ์–ด push๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. |
| `prepared` | ๋‚ด๊ตฌ pre-push ๊ธฐ๋ก์€ ์žˆ์ง€๋งŒ remote ๊ฒฐ๊ณผ๊ฐ€ ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ `recover`๊ฐ€ ๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค. |
| `check_blocked` / `safety_blocked` | ์„ค์ • ๊ฒ€์‚ฌ, ์†Œ์œ ๊ถŒ ์ฆ๋ช…, lock ๋˜๋Š” ๋™์‹œ ์ƒํƒœ ๊ฒŒ์ดํŠธ๊ฐ€ ์ฐจ๋‹จํ–ˆ์œผ๋ฉฐ ๋ช…์‹œ์  ํ•ด๊ฒฐ ์ „๊นŒ์ง€ Partial์ž…๋‹ˆ๋‹ค. |
| `git_failed` | Git ์กฐํšŒ ๋˜๋Š” push ๋ช…๋ น์ด ์‹คํŒจํ–ˆ์œผ๋ฉฐ Partial๋กœ ๋‚จ๊ณ  remote ์„ฑ๊ณต์„ ์ฃผ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |
| `remote_mismatch` | push๋Š” ์„ฑ๊ณต์„ ๋ฐ˜ํ™˜ํ–ˆ์ง€๋งŒ ๋…๋ฆฝ ๊ฒ€์ฆ์ด ๋ถˆ์ผ์น˜ํ•˜๋ฏ€๋กœ Partial ํ•ด๊ฒฐ ์ „์— remote๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. |
| `disabled` | ์›Œํฌ์ŠคํŽ˜์ด์Šค๊ฐ€ ์˜ตํŠธ์ธํ•˜์ง€ ์•Š์•„ Git ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ์ผ๋ฐ˜ ์™„๋ฃŒ๋ฅผ ๋ง‰์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |

๋ชจ๋“  ๊ฒฐ๊ณผ๋Š” `.agents/runs//git-finish.json`์— ๊ธฐ๋ก๋˜๊ณ  run telemetry์™€ ์ตœ์ข…
๋ฆฌํฌํŠธ์— ํˆฌ์˜๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ก์—๋Š” remote ์ด๋ฆ„, target ref, ๊ธฐ์ค€์ , run ์†Œ์œ  ๋ฐ ์˜ˆ์ƒ OID,
push ์ „ํ›„ remote OID, ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ, push ํ”Œ๋ž˜๊ทธ, ์‚ฌ์œ , ์‹œ๊ฐ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. remote URL,
๊ฒ€์‚ฌ ๋ช…๋ น๋ฌธ์ด๋‚˜ ์ถœ๋ ฅ, credential, ํ™˜๊ฒฝ๊ฐ’์€ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Yardlet์€ push๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— `prepared`๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋‹จ ํ›„ `yardlet recover`๋Š”
๊ฐ™์€ target lock ์•„๋ž˜์—์„œ ์†Œ์œ ๊ถŒ ๊ธฐ๋ก์„ ๋‹ค์‹œ ์ฝ๊ณ  remote๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. remote๊ฐ€ ์ด๋ฏธ
์˜ˆ์ƒ OID๋ผ๋ฉด ์ถ”๊ฐ€ push ์—†์ด `already_applied`๋กœ ์ˆ˜๋ ดํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๊ธฐ์ค€์ ๊ณผ ๊ฐ™๋‹ค๋ฉด ๊ฐ™์€
exact-OID push๋ฅผ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฐ–์˜ remote ๋˜๋Š” ๋กœ์ปฌ ์ƒํƒœ๋Š” fail-closed๋กœ
์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. remote ๊ฒ€์ฆ์€ ๋๋‚ฌ์ง€๋งŒ queue, `run.yaml` ๋˜๋Š” telemetry ๋ด‰์ธ์ด ๋Š๊ฒผ๋‹ค๋ฉด
๊ฒ€์ฆ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉฑ๋“ฑํ•˜๊ฒŒ ๋‹ค์‹œ ํˆฌ์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ฐจ๋‹จยท์‹คํŒจ ์ƒํƒœ๋Š” ์กฐ์šฉํžˆ ์žฌ์‹œ๋„ํ•˜๊ฑฐ๋‚˜
์™„๋ฃŒ๋กœ ์Šน๊ฒฉํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ๋•Œ๊นŒ์ง€ Partial๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ
๋„๊ทธํ‘ธ๋”ฉ๊ณผ ํ…Œ์ŠคํŠธ์—๋Š” local bare remote๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๊ณ„์•ฝ์€ Yardlet์ด ์ž์‹ ์˜ ๊ณต๊ฐœ
`origin`์— pushํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

## ํฌ๋ž˜์‹œ ์•ˆ์ „์„ฑ

Yardlet ์ƒํƒœ๋Š” ์žฌ์‹œ์ž‘์—๋„ ์‚ด์•„๋‚จ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ ์‹œ(๊ทธ๋ฆฌ๊ณ  `yardlet recover`๋ฅผ ํ†ตํ•ด)
์ค‘๋‹จ๋œ ์„ธ์…˜์„ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์„ธ์…˜์ด ๋น„์šฉ์„ ์น˜๋ €์ง€๋งŒ ์ฝ์ง€ ์•Š์€ ๊ณ„ํš ๊ฒฐ๊ณผ๋Š” ํ๋กœ
ํก์ˆ˜๋˜๊ณ , ์™„๋ฃŒ๋œ ๊ณ ์•„ ์‹คํ–‰์€ ํ‰๊ฐ€๋˜์–ด ๋จธ์ง€๋˜๋ฉฐ(worktree ์‹คํ–‰ ํฌํ•จ), ๋๋‚˜์ง€ ์•Š์€ ๊ฒƒ์€
๋‹ค์‹œ ํ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋‚ด๊ตฌ `prepared` Git ๋งˆ๋ฌด๋ฆฌ๋Š” ์†Œ์œ ๊ถŒ ๊ธฐ๋ก๊ณผ ํ˜„์žฌ remote OID๋กœ
๋Œ€์กฐ๋˜๊ณ , ๊ฒ€์ฆ๋œ ๊ฒฐ๊ณผ๋Š” ํ•œ ๋ฒˆ๋งŒ ํˆฌ์˜๋˜๋ฉฐ, ๋ชจํ˜ธํ•œ ์ƒํƒœ๋Š” Partial๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.

## ๋นŒ๋“œ

```bash
cargo build
cargo test
cargo run -- init
```

๊ธฐ์—ฌ: ๋นŒ๋“œ/ํ…Œ์ŠคํŠธ, ํ•ต์‹ฌ ๋ถˆ๋ณ€์‹, PR ์ ˆ์ฐจ๋Š” [CONTRIBUTING.md](CONTRIBUTING.md) ์ฐธ๊ณ .
๋‹ค๋ฅธ ์›Œ์ปค ์ถ”๊ฐ€๋Š” ์„ค์ •๋งŒ์œผ๋กœ ๋ฉ๋‹ˆ๋‹ค("์›Œ์ปค ์ถ”๊ฐ€ํ•˜๊ธฐ" ์ฐธ๊ณ ). ์ƒˆ ์›Œ์ปค๋ฅผ ๋ถ™์ด๋Š” PR์€
ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

## ์ •๊ทœ ์ƒํƒœ

Yardlet์ด ์ƒํƒœ๋ฅผ ์†Œ์œ ํ•˜๋ฉฐ, ์›Œ์ปค๋Š” ๊ทธ๋Ÿฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •๊ทœ ์ƒํƒœ๋Š” ๋Œ€์ƒ ์ €์žฅ์†Œ์˜
`.agents/` ์•„๋ž˜์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

```
.agents/
yardlet.yaml ์›Œํฌ์ŠคํŽ˜์ด์Šค ์„ค์ •
intent-contract.yaml ํ˜„์žฌ ๋ชฉํ‘œ / ์Šค์ฝ”ํ”„ / ์ˆ˜์šฉ ์กฐ๊ฑด
work-queue.yaml ์ž‘์—…
*-policy.yaml ๋„๊ตฌ / ์Šน์ธ / ์ƒํ˜ธ์ž‘์šฉ / ๋ฆฌ์„œ์น˜ / ๋นŒ๋ง ์ •์ฑ…
workers.yaml ์›Œ์ปค ํ”„๋กœํ•„ + ๋ผ์šฐํŒ…
memory/ ์ง€์†๋˜๋Š” ์›Œํฌ์ŠคํŽ˜์ด์Šค ์‚ฌ์‹ค (ํŒŒ์ผ ํ•˜๋‚˜์— ์‚ฌ์‹ค ํ•˜๋‚˜, git ์ถ”์ )
rules/ skills/ agents/ ํ•˜๋„ค์Šค ์ž์‚ฐ (๊ทœ์น™, ์Šคํ‚ฌ ์นดํƒˆ๋กœ๊ทธ, ์—ญํ•  ๋…ธํŠธ)
runs// ์‹คํ–‰๋ณ„ ์‚ฐ์ถœ๋ฌผ (๊ฒฐ๊ณผ, ๊ฒ€์ฆ, ์ฒดํฌํฌ์ธํŠธ, ํ•ธ๋“œ์˜คํ”„, git-finish)
conversations/.yaml ์›Œ์ปค์—๊ฒŒ ๋‹ค์‹œ ์ด์–ด์ง€๋Š” needs-user ๋Œ€ํ™” ๊ธฐ๋ก
checkpoints/ ์ตœ์‹  ์ปดํŒฉํŠธ ์žฌ๊ฐœ ์ง€์ 
handoffs/ ๋™๋ฃŒ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์š”์•ฝ
telemetry/ runs.jsonl: ์‹คํ–‰๋ณ„ ๊ฒฐ๊ณผ (์‹ ๋ขฐ + ๋งˆ์ด๋‹์˜ ์†Œ์Šค)
transitions/.yaml ์ž‘์—…๋ณ„ ์ƒํƒœ ๋ณ€ํ™” ๊ฐ์‚ฌ ๋กœ๊ทธ (์ž์œจ์„ฑ ์ง€ํ‘œ์˜ ์†Œ์Šค)
intents/ ์•„์นด์ด๋ธŒ๋œ ์†Œ์ง„ ์ธํ…ํŠธ (์ž‘์—… ์ด๋ ฅ ๋ณด์กด)
```

์‚ฌ์šฉ์ž ์ˆ˜์ค€์˜ ๋น„๋ฐ€์ด ์•„๋‹Œ ์„ค์ •์€ `~/.yardlet/` ์•„๋ž˜์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

## ๋ผ์ด์„ ์Šค

MIT