메인 콘텐츠로 건너뛰기
failproofai 대시보드는 AI 에이전트 세션을 모니터링하고 정책을 관리하기 위한 로컬 웹 애플리케이션입니다. 자리를 비운 사이 에이전트가 무엇을 했는지 확인해 보세요.

대시보드 시작하기

http://localhost:8020에서 열립니다. 대시보드는 파일 시스템에서 직접 읽습니다 — Claude Code 프로젝트 폴더와 failproofai 설정 파일을 참조합니다. 원격 서비스에는 아무것도 기록되지 않습니다.

페이지

프로젝트

머신에서 발견된 모든 Claude Code, OpenAI Codex, GitHub Copilot CLI (베타), Cursor Agent (베타), OpenCode (베타), Pi (베타), Gemini CLI (베타) 프로젝트를 나열합니다. Claude 프로젝트는 ~/.claude/projects/(또는 CLAUDE_PROJECTS_PATH로 설정된 경로)에서 검색됩니다. Codex 프로젝트는 ~/.codex/sessions/<YYYY>/<MM>/<DD>/*.jsonl 아래의 모든 트랜스크립트를 스캔하고 각 세션의 첫 번째 레코드에 기록된 cwd로 그룹화하여 검색됩니다. Copilot CLI 프로젝트는 각 ~/.copilot/session-state/<sessionId>/workspace.yaml을 스캔(COPILOT_HOME으로 설정 가능)하고 해당 cwd 필드로 그룹화하여 검색됩니다. Cursor Agent 프로젝트는 ~/.cursor/agent-sessions/<sessionId>/(폴백으로 conversations/sessions/를 탐색하며 CURSOR_HOME으로 설정 가능) 아래의 세션별 메타데이터를 스캔하여 meta.json / session.json / workspace.yaml에서 cwd 스칼라를 찾아 검색됩니다. OpenCode 프로젝트는 opencode db --format json을 통해 ~/.local/share/opencode/opencode.db의 SQLite DB를 쿼리하여(우리는 sessionproject 테이블을 읽고 project_id로 그룹화) 검색됩니다. Pi 프로젝트는 ~/.pi/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl(PI_SESSIONS_DIR로 설정 가능) 아래의 세션별 JSONL 트랜스크립트를 스캔하고 각 세션의 첫 번째 레코드에서 cwd를 가져와 검색됩니다. Gemini CLI 프로젝트는 ~/.gemini/tmp/<basename>/chats/session-<timestamp>-<uuid-prefix>.jsonl(GEMINI_SESSIONS_DIR로 설정 가능)을 스캔하고 인접한 .project_root 텍스트 마커에서 정규 cwd를 복원하여 검색됩니다. 여러 CLI에서 사용된 프로젝트는 일치하는 모든 배지와 함께 단일 행으로 표시됩니다. 테이블 위의 CLI 드롭다운을 사용하여 특정 에이전트 CLI로 필터링할 수 있으며, URL은 선택 항목을 ?cli=claude|codex|copilot|cursor|opencode|pi|gemini로 보존합니다. 각 프로젝트에는 다음이 표시됩니다:
  • 프로젝트 이름 (폴더 경로에서 파생)
  • CLI 배지 — Claude Code (주황색), OpenAI Codex (보라색), GitHub Copilot (파란색), Cursor Agent (에메랄드), OpenCode (황갈색), Pi (분홍색), 그리고/또는 Gemini CLI (하늘색)
  • 가장 최근 세션 활동 날짜
프로젝트를 클릭하면 해당 세션을 확인할 수 있습니다.

세션

프로젝트 내의 모든 세션을 나열합니다. 각 세션에는 다음이 표시됩니다:
  • 세션 ID
  • 시작 및 종료 타임스탬프
  • 도구 호출 수
  • 훅 활동 횟수 (실행된 정책)
날짜 범위 필터와 세션 ID 검색을 사용하여 목록을 좁힐 수 있습니다. 세션은 페이지로 나뉩니다. 세션을 클릭하면 세션 뷰어가 열립니다.

세션 뷰어

세션 뷰어는 자율 에이전트에 대한 핵심 질문에 답합니다: 에이전트가 무엇을 했고, 올바른 방향을 유지했는가? 헤더 옆의 CLI 배지는 세션이 Claude Code, OpenAI Codex, GitHub Copilot CLI, Cursor Agent, OpenCode, Pi, 또는 Gemini CLI 트랜스크립트인지를 나타냅니다. 세션에서 발생한 모든 일의 타임라인이 표시됩니다:
  • 메시지 - Claude의 텍스트 응답 및 사용자 프롬프트
  • 도구 호출 - Claude가 호출한 모든 도구, 입력 및 출력 포함
  • 정책 활동 - 각 도구 호출에 대해 어떤 정책이 실행되었고 어떤 결정을 반환했는지
상단의 통계 바는 세션 지속 시간, 총 도구 호출 수, 훅 결정 요약 (allow / deny / instruct 횟수)을 표시합니다. 로그 다운로드 버튼을 클릭하면 세션을 내보낼 수 있습니다. Claude Code, Codex, Copilot, Cursor, Pi, Gemini 세션의 경우 디스크에 저장된 원본 JSONL 트랜스크립트를 바이트 단위로 그대로 받을 수 있으며, OpenCode(세션이 디스크가 아닌 SQLite에 저장됨)의 경우 기본 session / messages / parts 테이블을 반영하는 JSON 문서를 받게 됩니다.

감사

과거 세션 전반에 걸쳐 에이전트가 실제로 어떻게 행동했는지에 대한 개성 있는 보고서입니다. failproofai audit CLI와 동일한 스캔을 실행하지만 단일 화면 공유 가능한 포스터 + 화면 아래의 네 섹션으로 렌더링됩니다:
  1. 포스터 — 첫 번째 뷰포트를 채웁니다. failproof_ai 워드마크 + 감사 레이블 · 원형 지수 (№ NN of 08) + 감사 날짜 · 수치 점수 (0–100) + 백분위 순위 필 (top 15%) · 원형 이름 (the optimist, the cowboy, the explorer, the goldfish, the paranoid architect, the precision builder, the hammer, the ghost 중 하나) + 3개 키워드 스트립 · // only N% of agents are this archetype 희귀도 줄 · 8×8 픽셀 시길 타일 · audit yours → failproof.ai 푸터가 포함된 독립적인 PNG 캡처 영역. 캡처 박스 바로 바깥에 세 개의 공유 버튼이 있습니다: post your archetype (X 인텐트), share on linkedin, download poster. 캡처는 html-to-image를 통해 실행되므로 PNG는 화면 렌더링과 픽셀 단위로 일치합니다 (점선 테두리, SVG 로고 마스크, 그라디언트, 폰트 메트릭 — 모두 보존).
  2. 강점 — 에이전트가 이미 잘 하고 있는 동작의 차분한 ✓ 행 목록으로, 라이브 감사 데이터(깨끗한 도구 호출 비율, 메인 브랜치에 직접 푸시 없음, 자격 증명 누출 없음, 재시도 폭풍 없음)에서 파생됩니다 — 감사 기간 동안 관련 정책이 깨끗한 기록을 가진 경우에만 표시됩니다.
  3. 특이점 — 심각도별로 순위가 매겨진 누락된 사항의 테이블: when · what slipped + the policy that would've caught it · severity pill · seen, 여기서 재발 횟수는 new (한 번), N× seen (2–9회), 또는 recurring (10회 이상)으로 표시됩니다.
  4. 개선 방법 — 권장 정책당 하나씩 차분한 행 목록: 흰색으로 표시된 정책 이름, 한 줄 설명, 오른쪽의 설치 명령 + 복사 버튼. 섹션 헤더는 enable all N → projected <score> · <tier> (모든 수정 사항 적용 시 도달할 점수)로 표시되며, [install all] 버튼은 모든 권장 정책에 대한 결합된 failproofai policy add a b c … 명령을 복사합니다.
  5. 더 나아지기 — 나란히 배치된 두 개의 카드. 왼쪽: 알림 설정 (3d / 7d / 14d / 30d 주기 선택기; 인증 후 /api/auth/reminder를 통해 유지). 오른쪽: failproof 혜택 잠금 해제 — invite a friend는 쉼표/공백/줄바꿈으로 구분된 친구 이메일 목록(전송당 최대 10개)을 입력하는 모달을 열고, /api/audit/invite에 POST하며, 이는 api-server의 POST /v0/invite로 전달됩니다. api-server는 수신자에게 invite@failproof.ai에서 발신자를 Cc에 포함하고 Reply-To를 설정하여 이메일을 전송하므로 수신자는 누가 초대했는지 알 수 있고 발신자는 받은 편지함에 사본을 받습니다. 익명 사용자는 초대가 발송되기 전에 발신자의 이메일을 알 수 있도록 먼저 AuthDialog로 라우팅됩니다. 권한/혜택 이행은 후속 작업입니다.
failproofai audit 런타임에 의해 구동됩니다 — 기본 스캔 엔진, 지원 플래그, 트랜스크립트별 캐시 불변 조건에 대해서는 감사 CLI를 참조하세요. 대시보드는 최신 결과를 ~/.failproofai/audit-dashboard.json(모드 0600, 단일 슬롯, 새 실행 시 덮어쓰기)에 캐시하여 재방문 시 즉시 표시됩니다. 트랜스크립트별 캐시와 전체 결과 캐시 모두 7일이 지나면 읽기 시 거부되므로 대시보드는 일주일 된 결과를 조용히 제공하지 않습니다 — TTL이 지나면 /audit는 빈 상태로 넘어가고 새로운 실행을 요청합니다. 보고서 하단 근처의 [ re-audit now ]를 클릭하면 noCache: true와 함께 /api/audit/run에 POST됩니다 — 재감사는 트랜스크립트별 캐시를 우회하고 캐시된 결과를 조용히 반환하는 대신 모든 트랜스크립트를 처음부터 다시 스캔합니다 — 대시보드는 실행이 완료될 때까지 1Hz로 /api/audit/status를 폴링합니다. 실행 중에는 경과 타이머와 함께 끈적한 분홍색 진행 스트립이 뷰포트 상단에 고정되며, 성공 시 새 결과가 제자리에 교체됩니다 (전체 페이지 새로고침 없음; 재감사 실패 시 이전 보고서는 그대로 유지). 실패 시 스트립은 RerunError.kind(timeout / network / post_failed)에 따른 문구와 함께 빨간색으로 변합니다. 빈 상태 (캐시 없음 또는 만료)와 세션 없음 상태 (캐시는 있지만 스캔에서 트랜스크립트를 찾지 못함)는 별도로 표시됩니다.

정책

정책 관리 및 활동 검토를 위한 두 개의 탭 페이지입니다.
  • 단일 패널에서 failproofai가 보호하는 에이전트 CLI를 다중 선택합니다 — Claude Code, OpenAI Codex, GitHub Copilot, Cursor Agent, OpenCode, Pi, Gemini CLI 모두 설치 상태 (Active / Detected / Inactive), 사용자 범위 설정 경로, 브랜드 컬러 강조가 포함된 행이 있습니다. 원하는 CLI를 체크 또는 체크 해제하고 Apply changes를 클릭하면 차이점이 한 번에 설치/제거됩니다. PATH에서 바이너리가 감지된 CLI는 미리 체크됩니다.
  • 클릭 한 번으로 개별 정책을 켜거나 끌 수 있습니다 (~/.failproofai/policies-config.json에 기록 — 모든 설치된 CLI에서 공유)
  • 정책을 확장하여 매개변수를 구성합니다 (policyParams를 지원하는 정책의 경우)
  • 사용자 정의 정책 파일 경로 설정

자동 새로고침

대시보드 상단 탐색에 자동 새로고침 토글이 있습니다. 활성화되면 현재 페이지가 주기적으로 새로고침되어 새 세션과 정책 활동이 나타나는 대로 표시됩니다. 장시간 실행되는 자율 에이전트 세션을 모니터링할 때 필수적입니다.

페이지 비활성화

대시보드의 일부만 필요한 경우, FAILPROOFAI_DISABLE_PAGES를 쉼표로 구분된 페이지 이름 목록으로 설정하세요:
유효한 값: policies, projects, audit.

프로젝트 경로 구성

기본적으로 대시보드는 표준 Claude Code 프로젝트 디렉터리에서 읽습니다. 사용자 정의 설정을 위해 재정의하세요:

localhost가 아닌 호스트에서 접근하기

개발 모드 (npm run dev)에서 대시보드를 실행하고 localhost가 아닌 호스트 이름(예: 사용자 정의 도메인, 원격 IP, 터널된 URL)에서 접근할 때 다음과 같은 경고가 표시될 수 있습니다:
이는 Next.js가 개발 전용 기능인 HMR(핫 모듈 리로드) 웹소켓에 대한 교차 출처 접근을 차단하는 것입니다. 호스트를 허용하려면 --allowed-origins 플래그를 사용하세요:
여러 호스트나 IP의 경우 쉼표로 구분된 목록을 전달하세요:
FAILPROOFAI_ALLOWED_DEV_ORIGINS 환경 변수를 대신 설정할 수도 있습니다:
이는 개발 모드에만 적용됩니다. failproofai(프로덕션 모드)를 실행할 때는 HMR 웹소켓과 교차 출처 개발 리소스 문제가 없습니다.