Skip to content

HardcoreMonk/sidabari

 
 

Repository files navigation

Sidabari

1인용 Claude Code 바이브 코딩 자동화 도구

Claude Code로 코드를 작성하고 AWS EC2에 배포·진단·수정하는 반복 사이클을 한 화면에서 처리하기 위한 데스크톱 도구.

License: MIT Platform Tauri Rust React Authored by Claude Code


실 운용 사례

이 도구는 현재 nullnull.co.kr — 온라인 강의 영상 판매 서비스 — 의 AWS EC2 백엔드 운영에 실제로 사용되고 있습니다. 빌드 → SFTP 업로드 → deploy.sh 재기동 → journalctl 로그 모니터링 → ERROR 발생 시 Claude 분석 요청까지의 일상 운영 루프를 Sidabari 한 화면에서 처리합니다. 데모/실험용이 아닌 프로덕션 운영 도구로 매일 사용 중입니다.

Sidabari 메인 화면

한 화면에 메인 Claude Code · EC2 SSH · 시스템 진단 대시보드 · 도구 콘솔이 함께. 빌드·업로드·배포 자동화와 ERROR 감지 후 진단 루프까지 끊김 없이 진행. (위 스크린샷은 nullnull.co.kr LMS 백엔드 운영 중 캡처)


저작 기록 (Authorship)

이 프로젝트의 모든 코드와 문서는 Claude Code가 100% 작성·유지보수합니다. 인간 협업자(cx8537)는 요구사항 정의·사양 결정·사용자 테스트·방향 검토를 담당했으며, 단 한 줄의 코드도 직접 손대지 않았습니다.

역할 담당
코드 작성 / 리팩토링 / 유지보수 Claude Code (주로 Claude Opus 4.7 1M context, 일부 Sonnet)
모든 문서 (README.md, SIDABARI_SPEC.md, CLAUDE.md, docs/**) Claude Code
사양 결정 · 요구사항 · UX 판단 · 검수 cx8537 (인간)
라이선스/저작권 보유 cx8537 (사용자가 도구를 통해 생성한 결과물의 권리)

매 세션 시작 시 CLAUDE.md가 절대 원칙(추측 금지·자동 재시도 금지·보안 규칙 등)으로 적용되며, 새 기능 추가나 버그 수정도 모두 같은 규칙 아래 Claude Code가 수행합니다. 커밋 메시지에는 Co-Authored-By: Claude 트레일러로 일관 표기됩니다.


무엇을 해 주는가

Claude Code → 빌드 → SFTP 업로드 → deploy.sh → 로그 모니터링 → ERROR 감지 → 진단 → Claude에 분석 요청, 이 사이클의 기계적인 부분만 자동화합니다. 분석·진단·수정 결정은 항상 사람이 합니다.

핵심 철학:

  • 기계적 작업은 자동화, 판단은 사람. Claude는 분석·추천만, 실행은 사람이 결정.
  • 자동 재시도 금지. 실패 시 즉시 멈추고 사람이 판단.
  • 강제 중단 시 SSH 채널은 유지. 같은 세션에서 수작업으로 이어받기.

자세한 동작 사양은 SIDABARI_SPEC.md, 작업 규칙·보안 정책은 CLAUDE.md를 참고하세요.


사용 대상

처음부터 본인 1명 사용을 가정하고 만든 도구입니다. 같은 워크플로우 — Claude Code로 코딩 → JVM/Spring Boot 같은 백엔드를 AWS EC2(systemd)에 SFTP로 올려 deploy.sh 재기동 → journalctl 로그 모니터링 → ERROR 진단 — 을 쓰는 다른 분이라면 그대로 쓰거나 포크해 본인 환경에 맞게 손보실 수 있습니다. MIT 라이선스로 공개합니다.

룰 엔진 같은 일반화 메커니즘은 일부러 두지 않았습니다. 동작이 코드에 직접 정의되어 있어 본인 워크플로우에 맞춘 변경이 오히려 쉬운 편입니다 (사양서 §1.3 참조).


주요 기능

  • 4영역 패널 레이아웃 (좌: 메인 Claude / 중상: 추가 Claude 탭 / 중하: EC2 SSH 메인+진단 / 우: 도구 콘솔). 분할·플로팅·도킹 지원.
  • 로컬 PTY로 Claude Code 인스턴스 실행 (portable-pty + ConPTY/Unix PTY 추상).
  • SSH/SFTP 메인+진단 채널 분리 (russh, 호스트키 TOFU 검증).
  • 빌드 → 업로드 → 배포 자동 실행 + 단계별 강제 중단 (Ctrl+C 전송, 채널 유지).
  • ERROR 자동 감지 (Log4j2 [ERROR] + Caused by 전체 체인).
  • EC2 진단 패널 [자료 일괄 수집] + 시스템 진단 대시보드 (1분 자동갱신 토글).
  • 진단 전용 SSH 키 + 서버 ForceCommand 패턴으로 Claude의 자율 진단을 안전하게 (시스템 변경 물리적으로 불가능).
  • Claude Code 훅 통합 (Stop/Pre/PostToolUse/Notification/SessionStart) — 패널별 활성도/도구 가시화, 데스크톱 알림, 위험 도구 게이트, 감사 로그(SQLite).
  • Tauri command 검증 + permissions.deny > permissions.allow + autoMode 분류기 통합.

기술 스택

앱 셸

Tauri

프론트엔드

Vite React TypeScript Tailwind CSS shadcn/ui Zustand Zod Lucide

추가 라이브러리: xterm.js v6, react-resizable-panels, react-rnd, @fontsource-variable/geist, @tauri-apps/api · plugin-clipboard-manager · plugin-dialog · plugin-notification · plugin-window-state.

백엔드 (Rust)

Rust Tokio SQLite

추가 crate: portable-pty, russh · russh-keys · russh-sftp, serde · serde_json, notify, ssh-key (ed25519), rand_core, sha2, async-trait, uuid.


사전 준비

  • Node.js: 20 이상 권장 (개발에 24.x 검증됨)
  • Rust toolchain: stable (rustup 권장). Windows는 MSVC 빌드 도구 + WebView2.
  • OS: 1차 검증은 Windows 11. macOS/Linux는 코드상 호환되나 미검증.
  • Claude Code CLI: claude 명령이 PATH에 있어야 메인/추가 Claude 패널에서 자동 spawn 가능.
  • EC2: SSH 접속 가능한 인스턴스 + (선택) 진단 전용 키 설치를 위한 sudo 권한.

개발 셋업

# 1) 의존성 설치
npm install

# 2) Rust + WebView2 등 Tauri 사전 요구사항 점검
npx @tauri-apps/cli info

# 3) 개발 모드 실행 (vite dev + Rust 컴파일 + Tauri 윈도우)
npm run tauri dev

빠른 빌드 확인만 필요하면:

npm run build      # tsc + vite 프론트엔드 빌드
cargo check --manifest-path src-tauri/Cargo.toml

빌드 (배포 산출물)

npm run tauri build

산출물 위치 (Windows 기준):

  • src-tauri/target/release/sidabari.exe — 단일 실행파일
  • src-tauri/target/release/bundle/ — MSI / NSIS 인스톨러

프로젝트 구조

Sidabari/
├── src/                       # React 프론트엔드
│   ├── components/
│   │   ├── layout/            # MainLayout, MainToolbar
│   │   ├── panels/            # 4영역 패널 컴포넌트
│   │   ├── terminal/          # PtyTerminal, SshTerminal (xterm 래퍼)
│   │   ├── modals/            # SettingsModal, GateModal, DiagSetupModal
│   │   ├── monitor/           # HookBridge (Claude Code 훅 미러링)
│   │   └── dashboard/         # DiagnosticDashboard
│   ├── lib/                   # ssh, pty, config, parseDiagnostic 등 IPC 래퍼
│   └── store/                 # Zustand 전역 상태
├── src-tauri/                 # Rust 백엔드
│   └── src/
│       ├── pty.rs             # 로컬 PTY (portable-pty)
│       ├── ssh.rs             # SSH 셸 (russh)
│       ├── ssh_exec.rs        # SSH exec / 헤드리스 collect
│       ├── sftp.rs            # SFTP 업로드 (sha256 검증)
│       ├── build.rs           # 로컬 빌드 명령 spawn
│       ├── config.rs          # 설정 load/save (TOML)
│       ├── hooks_bus.rs       # Claude Code 훅 IPC (events.jsonl + req/resp)
│       ├── audit_log.rs       # SQLite 감사 로그
│       ├── claude_safety.rs   # .claude/settings.local.json deny 규칙
│       ├── diag_setup.rs      # 원클릭 진단 키페어 + ForceCommand 셋업
│       └── diag_ssh_allow.rs  # autoMode allow 패턴 등록
├── docs/
│   └── ec2-diag-setup/        # 서버 측 install.sh, sidabari-collect.sh
├── branding/
│   └── sidabari-icon-source.png  # 아이콘 원본 (1024×1024)
├── CLAUDE.md                  # 작업 절대 원칙 + 보안 가이드 + UI 가이드
├── SIDABARI_SPEC.md           # 동작 사양서
└── README.md

설정

  • 위치 (OS 표준):
    • Windows: %APPDATA%\sidabari\sidabari.toml
    • macOS: ~/Library/Application Support/sidabari/sidabari.toml
    • Linux: ~/.config/sidabari/sidabari.toml
  • 앱 내 [설정] 모달에서 편집 (탭: 일반 / 서버 / 빌드·배포 / 모니터링 / 시스템 진단).
  • PEM 키는 경로만 저장 — 키 내용은 메모리에만 로드. 로그에 자격증명 안 찍힘.
  • 설정 변경 후 [재시작] 또는 자동 재시작 토글로 모든 Claude PTY 일괄 재시작 (.claude/settings.local.json 즉시 반영).

스키마 레퍼런스는 SIDABARI_SPEC.md §5.2, 코드는 src-tauri/src/config.rs / src/lib/config.ts.

설정 모달 화면 (5개 탭)

일반
앱 시작 시 claude 자동 실행, 훅 통합 설치, 호스트 IP 마스킹 등
일반 탭
서버 (SSH/SFTP)
EC2 host/user/개인키 경로 + SFTP 업로드 디렉토리
서버 탭
빌드/배포
빌드 명령·작업 디렉토리·jar 경로·타임아웃·배포 명령
빌드/배포 탭
모니터링
로그 모니터 명령·ERROR 정규식·컨텍스트 N줄·캡처 지연
모니터링 탭
시스템 진단
진단 전용 키 + 서버 측 ForceCommand 셋업, Claude Code 권한 정책 (자동 허용 등록 / 안전 규칙 deny 설치)
시스템 진단 탭

EC2 진단 셋업 (선택)

진단 전용 SSH 키 + 서버 측 ForceCommand로 잠근 채널을 만들면, Claude의 [시스템 데이터 수집] 명령이 자율적으로 SSH 접속해 진단 자료를 수집해도 시스템 변경이 물리적으로 불가능합니다.

앱의 [설정] → [시스템 진단] → [원클릭 진단 셋업] 버튼으로 일괄 처리:

  1. 로컬에 ~/.ssh/sidabari-diag ed25519 키페어 생성/재사용
  2. SFTP로 서버에 install.sh + sidabari-collect.sh 업로드
  3. 서버에서 sudoers / sshd Match User / authorized_keys command="..." 자동 구성

세부 동작은 docs/ec2-diag-setup/README.md 참조.


보안 정책 요약

  • 자격증명/키 파일 내용은 메모리에만, 로그·설정·DB에 안 들어감.
  • 사용자 입력을 셸 명령 문자열로 직접 조합하지 않음 (러시 구조화 API 사용).
  • SSH 호스트 키 TOFU 검증 (자동 수락 모드 X).
  • Tauri command 입력 검증 + 위험 도구 게이트 모달.
  • 감사 로그 (SQLite) 권한 0600.
  • 자세한 정책: CLAUDE.md §1.2.

문서

문서 용도
SIDABARI_SPEC.md 동작 사양서 (워크플로우 / UI / 설정 스키마)
CLAUDE.md 작업 규칙·보안 가이드·UI 스타일 가이드 (Claude Code 작업 시 1차 참조)
docs/ec2-diag-setup/README.md EC2 진단 키 + ForceCommand 셋업 상세

상태

  • 1차 UI + 핵심 워크플로우 + Claude Code 훅 통합 + 진단 대시보드까지 구현 완료.
  • 프로젝트는 활발히 변경 중 — 사양서가 1차 참조, 이 README는 요약.

라이선스

MIT License. LICENSE 파일 참조.

이 프로젝트가 유용하셨다면 그대로 쓰셔도, 포크해서 본인 환경에 맞게 손보셔도, 상업적으로 활용하셔도 자유롭습니다. 다만 위험 가능성이 있는 도구(SSH/SFTP/원격 명령 실행)이므로 무보증(AS IS) 조항을 충분히 인지하고 사용해 주세요.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 61.6%
  • Rust 34.7%
  • CSS 1.4%
  • Python 1.1%
  • JavaScript 1.1%
  • HTML 0.1%