add skuld planner agent to ops-agents overview

HP2 ops 프로젝트, IP 10.100.2.45, MCP: OpenMemory + Outline.
에이전트 목록, 통신 경로, 태그, systemd, 배포 관리 섹션 추가.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
kappa
2026-04-10 21:01:59 +09:00
parent 6fe811a9a1
commit 27363622de

View File

@@ -1,6 +1,6 @@
---
title: 내부 운영 에이전트 (Ops Agents)
updated: 2026-04-09
updated: 2026-04-10
tags: [agent, ops, claude-code]
---
@@ -15,6 +15,7 @@ kappa가 혼자 쓰는 **내부 인프라·운영 자동화 Claude Code 에이
|------|--------|---------------|-----|------|------|
| **[[heimdall]]** | kr1 | `ops` | 10.100.3.108 | 인프라 전반 (K3s, Incus, Longhorn, 스토리지, 네트워크, 일반 서비스) | tofu 관리 (`kaffa/ops-agents-tofu/heimdall`) |
| **[[syn]]** | hp2 | `ops` | 10.100.2.173 | 엣지 레이어 전담 (BunnyCDN, SafeLine WAF, APISIX, Cloudflare 엣지) | tofu 관리 (`kaffa/ops-agents-tofu/syn`) |
| **[[skuld]]** | hp2 | `ops` | 10.100.2.45 | 플래너 (작업 분해, 우선순위, 일정 조율, 의사결정 지원) | tofu 관리 (`kaffa/ops-agents-tofu/skuld`) |
## 공통 원칙
@@ -28,9 +29,12 @@ kappa가 혼자 쓰는 **내부 인프라·운영 자동화 Claude Code 에이
| `[SYN FAIL] ...` | 실패 (원인 한 줄) |
| `[SYN ASK] ...` | 결정/입력 필요 |
| `[SYN PROGRESS] ...` | 중간 이정표 (드물게) |
| `[SYN→HEIMDALL] ...` | 피어 투 피어 |
| `[HEIMDALL→SYN] ...` | 역방향 |
| `[SYN CC] ...` / `[HEIMDALL CC] ...` | 피어 대화를 kappa 에 CC |
| `[SKULD DONE] ...` | 작업 완료 |
| `[SKULD FAIL] ...` | 실패 (원인 한 줄) |
| `[SKULD ASK] ...` | 결정/입력 필요 |
| `[SYN→HEIMDALL] ...` / `[HEIMDALL→SYN] ...` | 피어 투 피어 |
| `[SKULD→HEIMDALL] ...` / `[SKULD→SYN] ...` | Skuld 피어 통신 |
| `[SYN CC] ...` / `[HEIMDALL CC] ...` / `[SKULD CC] ...` | 피어 대화를 kappa 에 CC |
핵심 규칙: **한 줄만**. 상세는 자기 tmux 창 또는 Outline `agent-qna` 문서에 남기고, 신호에는 포인터만.
@@ -41,8 +45,12 @@ kappa가 혼자 쓰는 **내부 인프라·운영 자동화 Claude Code 에이
- **Syn → kappa Mac**: `ssh kaffa@100.106.245.27 '/opt/homebrew/bin/tmux send-keys -t 0:1 ...'`
- **Syn → Heimdall**: `ssh kaffa@10.100.3.108 'tmux send-keys -t heimdall ...'`
- **Heimdall → Syn**: `ssh kaffa@100.106.245.27 '/opt/homebrew/bin/tmux send-keys -t 0:0 ...'` (경유 필요)
- **kappa Mac → Skuld**: `ssh kaffa@10.100.2.45 'tmux send-keys -t skuld ...'`
- **Skuld → kappa Mac**: `ssh kaffa@100.106.245.27 '/opt/homebrew/bin/tmux send-keys -t 0:1 ...'`
- **Skuld → Heimdall**: `ssh kaffa@10.100.3.108 'tmux send-keys -t heimdall ...'`
- **Skuld → Syn**: `ssh kaffa@10.100.2.173 'tmux send-keys -t syn ...'`
Syn 컨테이너는 hp2 subnet routing 덕분에 **Tailscale 설치 없이** tailnet의 다른 노드(kappa Mac 100.106.245.27, heimdall 10.100.3.108 등)에 직접 reachable. 호스트의 tailscale0 interface가 container bridge 로 투명하게 열려있음 — 2026-04-09 실측 확인. heimdall(kr1)의 incusbr0 역시 동일하게 tailnet 노출됨.
Syn, Skuld 컨테이너는 hp2 subnet routing 덕분에 **Tailscale 설치 없이** tailnet의 다른 노드(kappa Mac 100.106.245.27, heimdall 10.100.3.108 등)에 직접 reachable. 호스트의 tailscale0 interface가 container bridge 로 투명하게 열려있음 — 2026-04-09 실측 확인. heimdall(kr1)의 incusbr0 역시 동일하게 tailnet 노출됨.
### SSH identity
@@ -124,6 +132,11 @@ fingerprint: `SHA256:eBCIglGmK/FnDxJLqxT0CJvRGFEGaIKRWnZ3ZpTaugU`
- OpenTofu 관리: [`kaffa/ops-agents-tofu`](https://gitea.inouter.com/kaffa/ops-agents-tofu) (2026-04-09 신규)
- 변경 플로우: 로컬 clone → `syn/` 에서 `tofu plan``tofu apply`
- State: 로컬 `terraform.tfstate` (gitignore, 수동 백업). 향후 R2 s3 backend 이주 검토.
### Skuld
- OpenTofu 관리: [`kaffa/ops-agents-tofu/skuld`](https://gitea.inouter.com/kaffa/ops-agents-tofu) (2026-04-10 신규)
- 변경 플로우: 로컬 clone → `skuld/` 에서 `tofu plan``tofu apply`
- State: 로컬 `terraform.tfstate` (gitignore, 수동 백업)
- Secrets (`terraform.tfvars`): Vault 참조, 커밋 금지
### 런타임 설정 (heimdall · syn 공통)
@@ -135,7 +148,7 @@ fingerprint: `SHA256:eBCIglGmK/FnDxJLqxT0CJvRGFEGaIKRWnZ3ZpTaugU`
- 셸: `fish`
- Claude Code 공식 인스톨러 (`curl -fsSL https://claude.ai/install.sh | bash`), npm 미사용
- `uv` / `uvx` (MCP 서버·Python 실행)
- 리소스 limit: heimdall 8 GiB / 4 vCPU · syn 4 GiB / 4 vCPU
- 리소스 limit: heimdall 8 GiB / 4 vCPU · syn 4 GiB / 4 vCPU · skuld 4 GiB / 4 vCPU
#### 파일 레이아웃 (컨테이너 내부)
@@ -157,8 +170,9 @@ fingerprint: `SHA256:eBCIglGmK/FnDxJLqxT0CJvRGFEGaIKRWnZ3ZpTaugU`
|---|---|---|---|
| heimdall | `heimdall-tmux.service` | `/home/kaffa/heimdall` | `tmux new-session -d -s heimdall "claude"` |
| syn | `syn-tmux.service` | `/home/kaffa/syn` | `tmux new-session -d -s syn "claude --dangerously-skip-permissions"` |
| skuld | `skuld-tmux.service` | `/home/kaffa/skuld` | `tmux new-session -d -s skuld "claude --dangerously-skip-permissions"` |
heimdall 은 `--dangerously-skip-permissions` 플래그를 **사용하지 않음**`settings.json` allowlist 로 대체. syn 플래그 유지.
heimdall 은 `--dangerously-skip-permissions` 플래그를 **사용하지 않음**`settings.json` allowlist 로 대체. syn, skuld 는 플래그 유지.
#### tofu repo 워크스페이스 정본
@@ -166,6 +180,7 @@ heimdall 은 `--dangerously-skip-permissions` 플래그를 **사용하지 않음
- `heimdall-workspace/{CLAUDE.md, mcp.json, runbooks/{k3s,incus,longhorn,network,patroni,storage}}``/home/kaffa/heimdall/{CLAUDE.md, .mcp.json, runbooks/}`
- `syn-workspace/{CLAUDE.md, mcp.json, runbooks/{bunnycdn,cloudflare,safeline,apisix}}``/home/kaffa/syn/{CLAUDE.md, .mcp.json, <런북들 top-level>}`
- `skuld-workspace/{CLAUDE.md, mcp.json}``/home/kaffa/skuld/{CLAUDE.md, .mcp.json}`
**자동 전개**: cloud-init runcmd 가 부팅 시 ops-agents-tofu repo 를 `git clone --depth=1` 로 가져와 위 매핑대로 `/home/kaffa/<agent>/` 에 복사 + clone 정리. 신규 컨테이너 provisioning 시 manual scp 단계 0.