From 27363622de0d5f84a5b0304c13fd9ddff79eb36d Mon Sep 17 00:00:00 2001 From: kappa Date: Fri, 10 Apr 2026 21:01:59 +0900 Subject: [PATCH] add skuld planner agent to ops-agents overview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HP2 ops 프로젝트, IP 10.100.2.45, MCP: OpenMemory + Outline. 에이전트 목록, 통신 경로, 태그, systemd, 배포 관리 섹션 추가. Co-Authored-By: Claude Opus 4.6 (1M context) --- ops-agents/overview.md | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/ops-agents/overview.md b/ops-agents/overview.md index 2e3d761..dadecec 100644 --- a/ops-agents/overview.md +++ b/ops-agents/overview.md @@ -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//` 에 복사 + clone 정리. 신규 컨테이너 provisioning 시 manual scp 단계 0.