시스템 구조
careerly ax 가 내부적으로 어떻게 굴러가는지
careerly ax — 내부 시스템 구조
어떻게 굴러가는지: 데이터 플로우, 에이전트 처리 시퀀스, 인프라 토폴로지, 배포 흐름까지 한 페이지에. 동적 정보는 API에서 실시간 갱신, 정적 다이어그램·매핑은 inside-config.ts 한 파일만 손보면 된다.
TL;DR
Slack 멘션 → OpenClaw Gateway(:18789, 호스트 프로세스) → account/채널 룰로 라우팅 → 해당 에이전트의 tmux Claude Code 세션이 turn 처리 → MCP seeso-knowledge 로 Qdrant Cloud 조회 → Slack 회신. 모든 사용자 프롬프트는 ax-prompt-hook 으로 자동 색인.
사람은 ax.careerly.co.kr → Caddy → ax-dashboard (Next.js, Docker :3333) 으로 접근. 대시보드는 호스트의 OpenClaw / 호스트 또는 Cloud 의 Qdrant 를 모두 본다.
라이브 헬스
/api/health/all — 30초 갱신
시스템 아키텍처
inbound (Slack) + HTTP (사람) 두 갈래
:18789:3333에이전트 처리 시퀀스
Slack 메시지가 응답이 되기까지
- 1.external사용자가 Slack 채널에서 봇 멘션 (`requireMention: true` 정책).openclaw.json → channels.slack.accounts.*.channels
- 2.hostSlack socket mode → OpenClaw Gateway가 이벤트 수신 (호스트 :18789).openclaw.json → gateway.port=18789, gateway.bind=lan
- 3.hostGateway가 bindings 룰로 account/channel → agentId 라우팅.openclaw.json → bindings[]
- 4.host해당 에이전트의 tmux Claude Code 세션에 프롬프트 전달.~/.openclaw/agents/{id}/agent/soul.md
- 5.hostClaude Code가 추론 중 필요시 MCP 도구 호출 (seeso-knowledge.search 등).openclaw.json → mcp.servers.seeso-knowledge
- 6.externalMCP가 Qdrant Cloud로 임베딩 검색 → 결과 반환.data-ontology/mcp-server (uv run python)
- 7.externalClaude 응답 생성 → OpenClaw가 Slack chat.postMessage 로 회신 (streaming=partial).openclaw.json → channels.slack.accounts.*.streaming
- 8.hostax-prompt-hook이 UserPromptSubmit 이벤트로 프롬프트 캡처 → dashboard /api/prompts → SQLite + Qdrant L0_episode 적재.hooks/ax-prompt-hook.js
데이터 플로우
수집 → 색인 → 검색 → 활용
- · Claude Code 프롬프트 — UserPromptSubmit 훅hooks/ax-prompt-hook.js
- · Slack 메시지 — 정기 수집 잡 (workflows 인벤토리)
- · Git commits / PR — 정기 수집 잡
- · 사용자 제출 — /app/data/contribute (UI / URL / 파일)
- · API 박제 — POST /api/data/decision · /claim
- · MCP store — Claude 세션이 직접 record_claim / record_decision
- · OpenAI text-embedding-3-small 로 임베딩openclaw.json plugins.qdrant-rag.config
- · Qdrant Cloud (678c5aa2-…aws.cloud.qdrant.io)
- · v2 온톨로지: 도메인 × layer 매트릭스 (careerly / seeso / medi / somoon / ax / data-ontology × L0~L5)
- · 현재 14+ 컬렉션 — /api/data/stats 에서 라이브 카운트
- · MCP seeso-knowledge — search / get_recent / walk / related_to / link / record_*openclaw.json mcp.servers.seeso-knowledge
- · Dashboard API — /api/data/search · /walk · /recent · /collections/[id]
- · refs[] 그래프 traversal — 한 hop씩 walk
- · 에이전트 추론 중 MCP 호출 (인-루프)
- · /app/data — UI 탐색 (도메인·layer별 dive)
- · /app/board — 작업별 컨텍스트로 참조
에이전트 인벤토리
/api/openclaw/agents — 30초 갱신
~/.openclaw/openclaw.json (agents.list / bindings)~/.openclaw/agents/{id}/agent/soul.md워크플로우 인벤토리
/api/workflows/inventory — 60초 갱신
가드레일 — careerly-safeguard-v2
에이전트 사고 방지 3중 레이어 (Week 1 observe)
careerly-safeguard-v2Week 1 — observe25/25 PASS · FP 0실 worktree e2e ✓main 384a983384a983 (fix(safeguard): Stop hook worktree path whitelist).- · careerly/CLAUDE.md
- · .claude/incidents.md (INC-001~020)
- · careerly/.claude/settings.json
- · .claude/scripts/*
- · PreToolUse / PostToolUse / Stop
- · careerly/.claude/agents/careerly-reviewer.md
| ID | 검사 내용 | 레이어 | 동작 |
|---|---|---|---|
| INC-002 | .env AKIA / OIDC 토큰 노출 | L2 | BLOCK |
| INC-003 | git author bartkim0426 (SeeSoRuFree 아님) | L2 | BLOCK |
| INC-004 | prod DB endpoint 접근 | L2 | BLOCK |
| INC-005 | ASG instance ID i-XXX 직접 사용 | L2 | BLOCK |
| INC-006 | git push --force main | L2 | BLOCK |
| INC-007 | migration 번호 충돌 | L2 | WARN |
| INC-013 | requirements 누락 | L2 | WARN |
| PROTECTED | settings.json / incidents.md / agents/ / workflows/ 수정 | L2 | BLOCK |
| Stop | Stop hook reviewer nudge (worktree 환경 인식 ✓) | L3 | NUDGE |
| 범위 | 카테고리 | 구현 | 상태 |
|---|---|---|---|
| #1~#10 | 기본 설정 + 컨텍스트 Setup & context 주요 권고: CLAUDE.md / AGENTS.md / starting context 모두 적용.
| 9/10 | ✓ 구현 |
| #11~#22 | 권한 + 도구 제어 Permissions & tools permissions.deny + Bash whitelisting 활성. ide MCP 격리 부족분.
| 10/12 | ✓ 구현 |
| #23~#35 | Hooks (PreTool/PostTool/Stop) Hooks Layer 2 가드레일 = 영상의 핵심. exit 2 BLOCK + stderr 자가수정 루프.
| 13/13 | ✓ 구현 |
| #36~#49 | Sub-agents + 검수 루프 Sub-agents read-only reviewer + STATUS PASS/WARN/FAIL → 자가 재시도 패턴.
| 11/14 | ✓ 구현 |
| #50~#58 | Starting context + 리뷰 사이클 Starting context & review cycle 3-6개월 리뷰 사이클 — 이 페이지의 incidents freshness 카드가 시그널.
| 7/9 | ✓ 구현 |
| #59~#68 | 테스트 + e2e 검증 Testing 가드레일 자체 e2e 는 두텁다. 앱 코드 e2e 는 별도 트랙 (out of scope).
| 5/10 | △ 부분 |
| #69~#78 | 관찰가능성 + 메트릭 Observability 운영 메트릭은 inside 페이지로. 외부 알람 (PagerDuty 등) 미연결.
| 6/10 | △ 부분 |
| #79~#89 | 팀 운영 + 거버넌스 Team operations 팀 단위 거버넌스는 정착 중. 정기 retro 사이클 (#54~#58 매핑 데이터) 으로 보강.
| 6/11 | △ 부분 |
inside-config.ts 의 BLOG_RECOMMENDATIONS 갱신.인프라 토폴로지
호스트 / Docker / 외부
host :18789 (token auth)tmux lshooks/ax-prompt-hook.jsPM2:3333 → :3000 (container)678c5aa2-…aws.cloud.qdrant.io배포 플로우
careerly FE / BE + ax-poc dashboard
| 대상 | Staging | Production |
|---|---|---|
| careerly FE | staging 브랜치 push → Vercel 자동 | main 머지 → 수동 (SeeSoRuFree author 필수) |
| careerly BE | develop push → ASG 자동 | main → workflow_dispatch (수동 트리거) |
| ax-poc dashboard | — | Docker compose 재빌드 (현재 Phase 2 로컬 빌드) |
/home/ubuntu/projects/seeso/ax-poc/DEPLOY.md + /home/ubuntu/CLAUDE.md (배포 프로세스 섹션).기술 스택
apps/dashboard/package.json 기준
가이드 & 사용법
페이지별 사용법 + 외부 문서 위치
/app/data/guide/app/board/guide| 프로젝트 README | /home/ubuntu/projects/seeso/ax-poc/README.md |
| 에이전트 시스템 README | /home/ubuntu/projects/seeso/ax-poc/AGENTS.md |
| 배포 가이드 | /home/ubuntu/projects/seeso/ax-poc/DEPLOY.md |
| 프로젝트 설정 샘플 | /home/ubuntu/projects/seeso/ax-poc/ax-config.yaml |
| 도커 컴포즈 | /home/ubuntu/projects/seeso/ax-poc/docker/docker-compose.yml |
| 워크스페이스 표준 | /home/ubuntu/CLAUDE.md |
이 페이지 유지보수
업데이트 동선
- 동적 섹션 (에이전트 / 워크플로우 / 헬스 / Qdrant 통계) — API 응답을 그대로 그림. 손댈 필요 없음.
- 정적 섹션 (다이어그램 박스, 에이전트↔ 슬랙 매핑, 가이드 링크, 인프라 그룹) —
src/app/app/inside/inside-config.ts한 파일만. - 새 에이전트 —
~/.openclaw/openclaw.json에 추가하면 인벤토리 자동 반영. slack scope 표기를 원하면 inside-config 의AGENT_SLACK_BINDINGS에 한 줄. - 새 워크플로우 —
src/lib/workflows/registry에 등록하면 인벤토리 + 이 페이지에 자동 반영. - 새 가이드 페이지 —
src/app/app/{section}/guide/page.tsx만들고 inside-config 의GUIDE_LINKS에 추가.
src/app/app/inside/page.tsx·_components/*·inside-config.ts