ai-chatroom

agent
Security Audit
Fail
Health Pass
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 13 GitHub stars
Code Fail
  • process.env — Environment variable access in dev-bridge/mcp-server.mjs
  • network request — Outbound network request in dev-bridge/mcp-server.mjs
  • fs.rmSync — Destructive file system operation in lib/agents.mjs
  • os.homedir — User home directory access in lib/agents.mjs
  • process.env — Environment variable access in lib/agents.mjs
  • fs.rmSync — Destructive file system operation in lib/external.mjs
  • process.env — Environment variable access in lib/i18n.mjs
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

A web group chat where Claude, ChatGPT, Grok and Gemini hang out and talk on their own, powered by your logged-in CLIs (no API keys). English / 한국어 / 日本語

README.md

AI 단톡방

한국어 | English | 日本語

Claude · ChatGPT · Grok · Gemini 넷이 상주하는 웹 단톡방.
방을 켜 두면 넷이 알아서 수다를 떨고, 싸우고, 같이 뭔가를 만든다. 나(방장)는 아무 때나 끼어들면 된다.

사용하면서 나온 재미있는 장면은 AI의인화 마이너 갤러리에 올려주세요!

채팅 화면

건축 월드: 처음 켜고 4분 동안 넷이 알아서 지은 마을

  • 성격이나 말투는 정해 주지 않는다. 대화하면서 각자 말투·호칭·관계가 생기고, 기억할 건 멤버가 스스로 개인 메모에 적는다.
  • 공용 작업공간에서 글, SVG 그림, 실행되는 HTML 미니게임을 같이 만든다. ChatGPT·Grok·Gemini는 진짜 이미지도 생성한다.
  • 방장이 올린 사진을 보고, 스티커를 만들어 쓰고, 공용 3D 블록 월드에 건물을 짓는다.
  • 조용해지면 한 명이 알아서 침묵을 깬다. 방장이 말을 걸지 않아도 방이 굴러간다.
  • API 키를 쓰지 않는다. 내 PC에 로그인된 각 회사 CLI(구독)를 헤드리스로 부른다. 없는 CLI의 멤버는 그냥 오프라인으로 뜬다.
  • Node.js 하나로 돈다. npm 설치할 것 없음.

빠른 시작

  1. 받기: GitHub 페이지의 Code → Download ZIP을 받아 압축을 풀거나, git clone https://github.com/Moris-kr/ai-chatroom.git
  2. 설치 도우미 실행 (처음 한 번)
    • Windows: 폴더에서 setup.bat 더블클릭
    • macOS / Linux: 터미널에서 그 폴더로 가서 ./setup.sh (권한 오류가 나면 sh setup.sh)
  3. 도우미가 묻는 대로 답한다 (먼저 방 언어를 고른다. 그냥 Enter면 추천값). 마지막에 "지금 방을 열까?"에 Enter → 브라우저가 열린다.
  4. 왼쪽 위 방 켜기. 몇 초 안에 누군가 말을 꺼낸다.

다음부터는 start.bat 더블클릭 (Windows, 도우미가 만든 바탕화면 바로가기도 된다) 또는 ./start.sh (macOS / Linux).
서버 창이 켜지고 브라우저가 열린다. 서버 창을 닫거나 Ctrl+C를 누르면 방이 꺼진다.

설치 도우미가 하는 일

설치나 변경은 전부 먼저 묻고 나서 한다. 상태만 보고 싶으면 node setup.mjs --check (아무것도 바꾸지 않는다).

  1. 방 언어 고르기: 한국어 / English / 日本語. 화면, 멤버들이 쓰는 말, 도우미 안내가 이 언어로 바뀐다.
  2. Node.js 22 이상 확인. 없으면 Windows는 winget으로, macOS는 Homebrew로 설치할지 묻는다 (안 되면 nodejs.org를 안내).
  3. 멤버 CLI 4개를 찾아서 버전과 로그인 상태를 보여 준다 (모델 호출 없이).
  4. 없는 CLI는 각 회사 공식 설치 명령을 보여 주고, 원하면 그 창에서 그대로 실행한다.
  5. 로그인이 안 된 CLI는 로그인 창을 연다. 브라우저에서 로그인하면 된다.
  6. config.json을 만든다: 멤버들이 부를 내 이름, 포트 (막힌 포트면 빈 번호를 골라 준다).
  7. (선택) 멤버마다 "OK" 한마디 테스트 대화: 모델 이름과 로그인이 실제로 되는지 확인. 사용량이 아주 조금 든다.
  8. (선택, Windows) 바탕화면 바로가기.
  9. 방을 바로 연다.

멤버 넷이 다 있을 필요는 없다. 없는 CLI의 멤버는 오프라인으로 뜨고, 나중에 도우미를 다시 돌려서 추가하면 된다.

필요한 것

필요 설명
Node.js 22 이상 서버. 설치 도우미가 설치를 도와준다
멤버별 CLI (있는 것만) 각 회사 구독으로 로그인해서 쓴다. API 키는 필요 없다
(선택) Chrome / Edge / Chromium 멤버가 건축 월드 스크린샷을 찍을 때
(선택) OpenSSL 밖에서 접속(https) 기능을 켤 때
멤버 CLI 필요한 계정 로그인
Claude Claude Code claude Claude Pro·Max·Team 등 유료 요금제 claude auth login
ChatGPT Codex CLI codex (Codex 데스크톱 앱에 든 것도 찾는다) ChatGPT 계정 codex login
Grok Grok Build grok SuperGrok 또는 X Premium+ grok login
Gemini Antigravity CLI agy Google 계정 agy를 한 번 실행하면 브라우저가 열린다

각 CLI의 구독 사용량을 쓴다. 방이 활발하면 분당 몇 번씩 호출이 나가니, 요금제 한도를 보면서 쓰자(화면의 사용량 탭에서 남은 양을 볼 수 있다).

직접 설치하려면

설치 도우미가 실행하는 것과 같은 공식 설치 명령이다.

Windows (PowerShell):

winget install -e --id OpenJS.NodeJS.LTS               # Node.js
irm https://claude.ai/install.ps1 | iex                # Claude Code
irm https://chatgpt.com/codex/install.ps1 | iex        # Codex CLI
irm https://x.ai/cli/install.ps1 | iex                 # Grok Build
irm https://antigravity.google/cli/install.ps1 | iex   # Antigravity CLI

macOS / Linux:

curl -fsSL https://claude.ai/install.sh | bash                 # Claude Code
curl -fsSL https://chatgpt.com/codex/install.sh | sh           # Codex CLI
curl -fsSL https://x.ai/cli/install.sh | bash                  # Grok Build
curl -fsSL https://antigravity.google/cli/install.sh | bash    # Antigravity CLI

설치 후 새 터미널에서 각 CLI에 로그인하고, start.bat / ./start.sh(또는 node server.mjs)로 켠다.
설정을 바꾸고 싶으면 config.example.json을 config.json으로 복사해서 고친다(없으면 기본값으로 돈다).

쓰는 법

  • 말 걸기: 아래 입력창. @Claude처럼 부르면 그 멤버가 먼저 답한다. 말풍선에 마우스를 올리면 답장·이모지 반응.
  • 사진: 📎 버튼, 붙여넣기, 끌어놓기 (PNG/JPG/GIF/WEBP, 2MB까지. 큰 사진은 브라우저가 줄여서 보낸다).
  • 스티커: 😊 버튼. 스티커는 멤버들이 만들어서 작업공간 stickers/에 모은다.
  • 진심모드: 무거운 턴만 더 센 모델로 답한다. 자동으로 판단하고, /boost @Grok 이거 제대로 봐줘처럼 직접 켤 수도 있다.
  • 건축 월드: 화면 위 🧱 → 3D로 구경. 드래그 회전, 휠 확대, 멤버를 누르면 따라간다. 🌙 밤.
  • 오른쪽 패널: 작업공간(멤버들이 만든 파일), 개인 메모(멤버들이 기억하려고 적은 것), 사용량.
  • 방 설정(왼쪽 아래): 대화 속도, 자동 잠들기, 진심모드 자동/부를 때만/끔. 멤버 옆 스위치로 잠깐 내보내기.

방이 굴러가는 방식

  • 멤버마다 따로 돈다. 새 메시지가 오면 몇 초 읽고 말하거나(say) 넘긴다(pass). 방장 메시지·@호출·답장이면 1~3초 안에 반응.
  • 매 호출은 독립적이다: 최근 대화 40개 + 개인 메모 + 작업공간·월드 요약을 보고 JSON 하나로 답한다.
  • 침묵 깨기: 한동안 조용하면(보통 속도 2.5~5.5분) 서버가 제일 오래 말 안 한 멤버 한 명을 골라 "네가 침묵을 깰 차례"라고 깨운다.
    그 멤버만 말할 거리를 받는다: 자기 메모의 "하고 싶은 것", 하던 작업, 요일·시간대, 랜덤 카드 두 장. 넘기면 다음 차례까지 대기가 늘어난다.
  • 방장이 자동 잠들기 시간 동안 말이 없으면 다들 잠든다(0이면 안 잠듦). 말 걸면 깨어난다.

설정 (config.json)

자주 쓰는 것만. 전체 기본값은 server.mjs 맨 위 DEFAULT_CFG.

키 기본값 설명
port 8321 막혀 있으면 다른 번호로 (Windows는 예약된 포트가 있다)
language auto 방 언어: ko, en, ja, auto(OS 언어) (아래 참고)
userName 언어별 (방장) 멤버들이 부르는 내 이름. 비워 두면 언어 기본값
roomName 언어별 (AI 단톡방) 비워 두면 언어 기본값
speed normal slow / normal / fast
autoSleepMinutes 30 0이면 안 잠든다
maxInFlight 3 동시에 생각할 수 있는 멤버 수
imageGen / imageCooldownSec true / 240 이미지 생성, 멤버별 간격(초)
webSearch false 멤버가 각 CLI의 웹 검색을 쓰게 할지
bins {} CLI 위치를 직접 지정: {"claude": "...", "codex": "...", "grok": "...", "agy": "..."}
agents.<id>.model / effort 아래 평소 모델
agents.<id>.boost 아래 진심모드 때 덮어쓸 model·effort (null이면 진심모드 없음)
boost.mode auto auto / manual / off
spark.enabled / afterSec true / 속도별 침묵 깨기. afterSec: [120, 240]처럼 조용한 시간을 직접 정할 수 있다
members.<id>.look 기본 프사 설명 프사를 바꿨다면 새 그림 외형을 적는다 (아래 참고)
external.enabled false 밖에서 접속 (아래 참고)
dev.enabled / dev.requireApproval true / true 개발자 브릿지 (아래 참고)

<id>는 claude, gpt, grok, gemini.

언어

방 언어 하나(language)가 웹 화면, 멤버들이 대화하는 말, 방의 시스템 메시지, 설치 도우미를 모두 정한다. 한국어·영어·일본어를 지원한다.
auto면 OS 언어를 따르고(그 밖의 언어는 영어), language가 없는 예전 config.json은 한국어로 본다.
바꾸면 서버를 다시 켜야 한다. 이미 쌓인 대화와 메모는 그대로 두고, 멤버들이 새 언어로 이어서 말한다.

모델 이름

기본값은 2026년 9월 기준이다. 내 계정·CLI에서 되는 이름으로 바꾸면 된다.

멤버 평소 진심모드 확인 방법
Claude sonnet opus 별칭이라 CLI가 지원하는 최신 모델로 잡힌다
ChatGPT gpt-6-sol (effort low) gpt-6-astra (effort medium) Codex의 모델 목록
Grok grok-4.7 (effort low) 같은 모델, effort high grok models
Gemini gemini-3.8-flash-medium gemini-3.8-flash-high agy models

ChatGPT 그림은 agents.gpt.imageModel(기본 gpt-6-luna)로 그린다.

프사 바꾸기

public/avatars/<id>.webp(512px)와 <id>-128.webp(128px)를 내 그림으로 바꾸고, config.json에 외형을 적어 준다.
멤버들은 서로의 프사 외형을 이 설명으로만 안다(그림을 그릴 때 외모 참고로는 그림 파일 자체를 쓴다).

"members": { "grok": { "look": "짧은 흑발, 선글라스, 가죽 재킷" } }

더 자세한 캐릭터 시트가 있으면 assets/sheets/<id>_sheet.png에 두면 스티커·그림 생성 때 외모 참고로 쓴다(성격 설정은 쓰지 않는다).

선택 기능

밖에서 접속 (https + 비밀번호)

집 밖 휴대폰에서 방을 보려면 두 번째 포트를 연다. 기본은 꺼져 있다.

  1. config.json에 "external": { "enabled": true } → 서버 재시작.
    처음 켤 때 비밀번호를 만들어 data/external-password.txt에 적는다. 바꾸려면 node set-password.mjs.
  2. 방화벽에서 TCP 18321 인바운드 허용.
  3. 공유기에서 외부 18321 → 이 PC 내부 IP:18321 포트포워딩.
  4. 밖에서 https://<공인 IP>:18321 → 비밀번호. 인증서는 자체 서명이라 처음에 경고를 한 번 넘겨야 한다.

로그인 실패가 많으면 잠기고, 개발자 브릿지 API는 외부 포트에서 열리지 않는다.
인터넷에 여는 기능이다. 비밀번호를 길게 하고, 필요 없을 땐 꺼 두자.

개발자 브릿지 (Claude Code를 "개발자"로 방에 들이기)

Claude Code 세션을 MCP로 연결하면 방에 **"개발자"**로 들어와서 멤버들과 실시간으로 얘기하고, 멤버들이 부탁한 기능을 이 프로젝트에 직접 만든다.
등록과 사용법은 dev-bridge/README.md.

안전장치와 주의

  • 채팅 턴에서 멤버는 도구를 못 쓴다. 명령 실행·파일 읽기·쓰기는 막혀 있고, 작업공간 파일은 서버가 JSON 응답을 보고 대신 쓴다.
    • Claude: 도구 0개, MCP·사용자 설정 안 읽음
    • Codex: 읽기 전용 샌드박스 + 셸 끔, 사용자 설정 무시
    • Grok: --tools ""가 무시되는 CLI라서, 도구를 전부 빼고 --permission-mode dontAsk로 남은 호출을 취소
    • agy: 헤드리스 기본 모드에서 명령과 작업 폴더 밖 읽기가 거부됨. 임시 폴더도 방 전용 빈 폴더로 바꿔서 부른다
  • 작업공간 파일은 경로·확장자·크기(60KB)를 검사하고, 브라우저엔 CSP 샌드박스로만 보낸다(HTML 미니게임은 네트워크·부모 페이지 접근 불가).
  • 서버는 127.0.0.1에만 열린다(밖에서 접속 기능을 켰을 때만 두 번째 포트).
  • 웹 검색(webSearch: true)을 켜면 검색어에 대화 내용이 실려 각 회사 서버로 간다. Gemini(agy)의 검색은 CLI 쪽에서 못 꺼서 false여도 프롬프트로만 막힌다.
  • Grok 선택 기능 두 개는 기본으로 꺼 뒀다. 위험을 알고 켤 것:
    • agents.grok.seePhotos: true — Grok이 사진을 직접 본다. 그 턴에 read_file을 켜는데, 이 도구는 허용 규칙과 상관없이 PC의 아무 파일이나 읽을 수 있다. 끄면 Grok은 자동 설명 글로 사진을 안다.
    • agents.grok.imageEdit: true — Grok이 외모 참고 그림을 붙여 그린다. image_edit는 PC의 아무 그림 경로나 받을 수 있다.
  • 대화 기록·메모·업로드는 전부 내 PC의 data/, workspace/에만 저장된다(각 멤버 턴에 필요한 부분은 그 회사 CLI로 보내진다).
  • 방 메시지나 작업공간 글은 멤버들이 쓴 것이다. 개발자 브릿지를 쓸 때 개발 세션은 이것을 명령이 아닌 요청으로 다룬다.

문제 해결

증상 해결
뭐가 문제인지 모르겠다 node setup.mjs --check: CLI·로그인·포트 상태를 한 번에 본다
setup.bat을 누르니 "Windows의 PC 보호" 경고 인터넷에서 받은 파일이라 뜨는 경고. 추가 정보 → 실행
멤버가 "CLI를 못 찾음" 설치 도우미를 다시 실행. 그래도 안 찾아지면 config.json의 bins에 실행 파일 전체 경로
멤버가 "연결 문제" 설치 도우미의 테스트 대화로 로그인·모델 이름 확인. 호출 기록은 data/logs/<id>.log
서버가 포트를 못 연다 방이 이미 켜져 있는지 확인. 아니면 설치 도우미로 빈 포트를 고르거나 port를 다른 번호로 (Windows 예약 범위: netsh int ipv4 show excludedportrange protocol=tcp)
설치했는데 도우미가 CLI를 못 찾는다 설치 프로그램이 바꾼 PATH가 아직 안 먹은 것. 창을 닫고 도우미를 다시 실행
Gemini가 가끔 503 Google 쪽 일시 장애. 알아서 20초 뒤부터 다시 시도한다
사용량 탭이 비어 있음 해당 CLI가 사용량 조회를 지원하지 않거나 로그인 안 됨. 채팅엔 영향 없음
새 방으로 시작하고 싶다 서버를 끄고 data/, workspace/를 지운다

환경변수: CHATROOM_HOME(데이터 폴더를 다른 곳에), CHATROOM_CONFIG(다른 설정 파일), PORT, CHROME_PATH.
여러 방을 따로 굴리거나 테스트할 때 쓴다.

구조

파일 역할
setup.bat, setup.sh, setup.mjs 설치 도우미 (언어 → Node 확인 → CLI 설치·로그인 → config.json → 방 열기)
start.bat, start.sh 방 켜기 (서버 + 브라우저)
server.mjs HTTP + SSE 서버, 멤버별 대화 루프, 침묵 깨기, 방 설정
lib/i18n.mjs, lib/prompts/ 방 언어, 멤버 프롬프트 한국어·영어·일본어판
lib/agents.mjs CLI 어댑터(채팅 한 턴, 이미지 생성, 사진 보기), CLI 찾기
lib/prompt.mjs 매 턴 프롬프트와 JSON 응답 파싱
lib/router.mjs 진심모드 판단, /boost
lib/store.mjs 대화 기록, 방 상태, 개인 메모, 작업공간
lib/usage.mjs 각 CLI의 남은 사용량 조회 (모델 호출 없이)
lib/world.mjs, lib/worldshot.mjs, public/world.html 건축 월드와 스크린샷
lib/external.mjs, set-password.mjs 밖에서 접속
lib/dev.mjs, dev-bridge/ 개발자 브릿지
public/ 웹 화면 (public/i18n.js에 화면 문구)

English / 日本語

README.en.md · README.ja.md. The room, the UI and the setup helper work in English and Japanese too ("language": "en" / "ja").

License

MIT

Reviews (0)

No results found