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:
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user