Claude Codeλ₯Ό νμ€ν¬λ³ μ λ΄ κ°λ°μλ‘ λ§λλ μν¬νΈλ¦¬ κΈ°λ° νλ‘μ νΈ κ΄λ¦¬ μμ΄μ νΈ.
μ¬λ¬ λ ν¬λ₯Ό μ€κ°λ©° Claude Codeλ‘ μμ νλ©΄, νμ€ν¬λ§λ€ κ°μ μ μ μ λ°λ³΅νκ² λ©λλ€:
Jira ν°μΌ νμΈ β λΈλμΉ μμ± β μν¬νΈλ¦¬ λ§λ€κΈ° β fetch β
Claude μ΄κΈ° β "μ΄ λ ν¬λ..." μ€λͺ
β "Jira λ΄μ©μ..." λΆμ¬λ£κΈ° β μμ
μμ
5λΆμ§λ¦¬ μ μ x ν루 10λ² = 50λΆ. PR λ¦¬λ·°κ° μ€λ©΄ λ κ·Έ νκ²½μΌλ‘ λμκ°μΌ ν©λλ€.
Worktreeeλ μ΄ μ 체λ₯Ό ν λ§λλ‘ μ€μ λλ€:
"PROJ-107 μ΄λ κΈ°λ₯ νμ€ν¬ λ§λ€μ΄μ€"
β Git worktree μλ μμ±
β Jira ν°μΌ + Notion λ¬Έμ μλ μ‘°ν
β Claude μΈμ
μμ (컨ν
μ€νΈ μ£Όμ
μλ£)
β `claude --continue`λ‘ λ°λ‘ μμ
μμ
Worktreeeμ ν΅μ¬μ "λμμ€κΈ°"κ° κ³΅μ§λΌλ μ μ λλ€.
| μΌλ°μ μΈ λ°©μ | Worktreee | |
|---|---|---|
| νμ€ν¬ μμ | μλ μ μ 5λΆ | ν λ§λ β μ¦μ |
| νμ€ν¬ μ ν | stash β checkout β 컨ν μ€νΈ μ¬μ£Όμ | cd β claude --continue |
| PR 리뷰 λμ | νκ²½ 볡μ β Claudeμ λ€μ μ€λͺ | cd worktree/ && claude --continue |
| Claude νμ© | λ§€λ² μ²μλΆν° λ ν¬ μ€λͺ | Jira+Notion μλ μ£Όμ , μΈμ μ μ§ |
| λμ μμ | λΈλμΉ μΆ©λ, stash μ§μ₯ | μν¬νΈλ¦¬λ³ μμ 격리 |
Git worktreeλ‘ κ° νμ€ν¬κ° λ
립λ λλ ν 리μ΄κΈ° λλ¬Έμ, λΈλμΉ μ νλ, stashλ, 컨ν
μ€νΈ μ¬μ£Όμ
λ νμ μμ΅λλ€. κ·Έλ₯ cdνκ³ claude --continue.
1. Worktreeeμκ²: "PROJ-107 μ΄λ κΈ°λ₯ νμ€ν¬ λ§λ€μ΄μ€"
β μν¬νΈλ¦¬ μμ±, Claude μΈμ
μμ (Jira/Notion 컨ν
μ€νΈ μ£Όμ
)
2. ν°λ―Έλ: claude --continue
β λ°λ‘ μμ
μμ β Claudeκ° μ΄λ―Έ ν°μΌ λ΄μ©μ μκ³ μμ
3. PR μ μΆ β λ€λ₯Έ νμ€ν¬ μμ
μ€ β 리뷰 λμ°©
4. ν°λ―Έλ: cd my-project-worktrees/PROJ-107-xxx && claude --continue
β Claudeκ° μ΄μ μμ
λ§₯λ½μ κΈ°μ΅ν μνλ‘ λ¦¬λ·° λμ
β stash μμ, λΈλμΉ μ ν μμ, μ¬μ€λͺ
μμ
νμ€ν¬λ§λ€ λ
립λ μν¬νΈλ¦¬λ₯Ό μλ μμ±ν©λλ€. git fetch β λΈλμΉ μμ± β μν¬νΈλ¦¬ μ€μ μ ν λ²μ μ²λ¦¬νκ³ , νμ€ν¬ μμ μ μν¬νΈλ¦¬λ ν¨κ» μ 리λ©λλ€.
μν¬νΈλ¦¬ μμ± ν Claude CLI μΈμ
μ μλ μμν©λλ€. Jira ν°μΌ λ΄μ©κ³Ό Notion λ¬Έμλ₯Ό 컨ν
μ€νΈλ‘ μ£Όμ
νλ―λ‘, Claudeκ° μ²μλΆν° "무μμ ν΄μΌ νλμ§" μκ³ μλ μνλ‘ μμν©λλ€. ~/.claude λ§μ΄νΈλ‘ νΈμ€νΈμ μΈμ
μ 곡μ νμ¬ claude --continueλ‘ μ΄μ΄μ μμ
ν μ μμ΅λλ€.
νλ‘μ νΈ/νμ€ν¬ λͺ©λ‘, GitHub PR μν λ°°μ§, νμ€ν¬ μμ± λͺ¨λ¬ (AI λΈλμΉ μ΄λ¦ μΆμ²), λλκ·Έ μ€ λλ‘ μμ λ³κ²½, Jira μ΄μ κ·Έλν μκ°ν (D3.js) λ±μ μ 곡ν©λλ€.
νμ€ν¬ μμ± μ Jira ν€λ₯Ό μλ κ°μ§νμ¬ ν°μΌ λ΄μ©μ Claude μΈμ μ μ£Όμ ν©λλ€. Notion λ§ν¬λ μλ μ‘°ν. μ΄μ νΈλ¦¬λ₯Ό μΈν°λν°λΈ κ·Έλνλ‘ μκ°ννκ³ , μ²¨λΆ μ΄λ―Έμ§λ₯Ό Vision APIλ‘ λΆμν μ μμ΅λλ€.
SSHλ₯Ό ν΅ν΄ μ¬λ¬ λ¨Έμ μ νλ‘μ νΈλ₯Ό ν΅ν© κ΄λ¦¬ν©λλ€. μλ²μμ Dockerλ‘ μ€ννλ©΄μ, μ격 λ¨Έμ μ νλ‘μ νΈλ μν¬νΈλ¦¬ μμ±κ³Ό git λκΈ°νκ° κ°λ₯ν©λλ€.
/v1/chat/completions μλν¬μΈνΈλ₯Ό μ 곡νμ¬ OpenWebUI λ±μμ λͺ¨λΈμ²λΌ μ°κ²°ν μ μμ΅λλ€. μμ°μ΄λ‘ λννλ©΄ Agentκ° 20+ tool callingμΌλ‘ νλ‘μ νΈ/νμ€ν¬λ₯Ό κ΄λ¦¬ν©λλ€.
OpenWebUI μ°κ²° λ°©λ²:
- OpenWebUI κ΄λ¦¬μ β Connections β OpenAI API μΆκ°
- URL:
http://<worktreee-host>:4000/v1 - λͺ¨λΈ λͺ©λ‘μμ
worktreeeμ ν ν λν μμ
Worktreeeλ Docker 컨ν μ΄λ μμμ νΈμ€νΈμ Git, SSH, Claude CLIλ₯Ό νμ©νλ ꡬ쑰μ λλ€. λ°λΌμ νΈμ€νΈμ λ€μμ΄ νμν©λλ€:
| μꡬμ¬ν | μ€λͺ | νμΈ λ°©λ² |
|---|---|---|
| Docker & Docker Compose | 컨ν μ΄λ μ€ν | docker compose version |
| Git | μν¬νΈλ¦¬ μμ± | git --version |
GitHub CLI (gh) |
PR μ‘°ν, repo μΈμ¦ | gh auth status |
| Claude Code CLI | Claude μΈμ μμ | claude --version |
| SSH ν€ (μ ν) | μ격 λ¨Έμ μ κ·Ό | ssh -T your-remote |
| Jira API ν ν° (μ ν) | Jira μ°λ | Atlassian μ€μ μμ λ°κΈ |
Docker 컨ν μ΄λκ°
~/.claude,~/.config/gh,~/.sshλ±μ λ§μ΄νΈνμ¬ νΈμ€νΈμ μΈμ¦ μ 보λ₯Ό 곡μ ν©λλ€.
# Clone git clone https://github.com/your-org/worktreee.git cd worktreee # Configure cp .env.example .env # Edit .env β OPENAI_API_KEYλ νμ, λλ¨Έμ§λ μ ν # Run docker compose up -d
| Variable | Description | Default |
|---|---|---|
OPENAI_BASE_URL |
LLM API endpoint (OpenAI-compatible) | https://gateway.letsur.ai/v1 |
OPENAI_API_KEY |
API key | (required) |
OPENAI_MODEL |
Model to use | claude-sonnet-4-20250514 |
LOCAL_MACHINE |
Alias for the machine running the server | local |
REMOTE_HOSTS |
Remote SSH hosts (alias:user@host, comma-separated) |
(optional) |
JIRA_URL |
Jira instance URL | (optional) |
JIRA_EMAIL |
Jira account email | (optional) |
JIRA_API_TOKEN |
Jira API token | (optional) |
Browser / OpenWebUI
β
βΌ http://localhost:4000
ββββββββββββββββββββββββββββββββββββββββββββ
β Docker Compose β
β β
β web (Next.js) βββΊ api (FastAPI) β
β :4000 :8000 β
β β
β api μ£Όμ κΈ°λ₯: β
β - /v1/chat/completions (Agent API) β
β - Tool Calling (20+ PM tools) β
β - Git worktree μμ±/μμ β
β - Claude CLI μΈμ
κ΄λ¦¬ β
β - Jira/Notion API μ°λ β
β - State μ μ₯ (YAML) β
β β
β Volume Mounts: β
β ~/Documents β νλ‘μ νΈ νμΌ μ κ·Ό β
β ~/.ssh β SSH ν€ (μ격 λ¨Έμ ) β
β ~/.claude β Claude μΈμ
곡μ β
β ~/.config/gh β GitHub CLI μΈμ¦ β
ββββββββββββββββββββββββββββββββββββββββββββ
Worktreeeλ SSHλ‘ μ격 λ¨Έμ μ νλ‘μ νΈλ κ΄λ¦¬ν μ μμ΅λλ€:
# .env REMOTE_HOSTS=mac:user@192.168.1.10,server2:user@192.168.1.50
νλ‘μ νΈ μΆκ° μ λ¨Έμ λ³μΉμ μ§μ νλ©΄, ν΄λΉ λ¨Έμ μμ μν¬νΈλ¦¬ μμ±/git λκΈ°νκ° μ€νλ©λλ€.
| Component | Technology |
|---|---|
| Monorepo | Turborepo + pnpm |
| Backend | Python 3.11+, FastAPI, uv |
| Frontend | Next.js 15, React 19, Tailwind CSS 4 |
| LLM | OpenAI-compatible API |
| State | YAML file |
| Container | Docker |
| GitHub | GitHub CLI (gh) |
# Install dependencies pnpm install # Run all (Turborepo) pnpm dev # Web only pnpm dev:web # API only cd apps/api && uv run uvicorn main:app --reload --port 8000
MIT