discord-agent-bridge 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,201 +1,262 @@
1
1
  # discord-agent-bridge
2
2
 
3
+ 🌐 [한국어](README.ko.md) | **English**
4
+
3
5
  > Self-hosted Discord bot that runs AI coding agents — Claude Code, Codex, and more — per channel. Role-based access, multi-server, extensible.
4
6
 
5
- **채널마다 Claude Code / Codex 같은 AI 코딩 에이전트를 붙여 쓰는 셀프호스팅 Discord 봇입니다.** PC에서 실행되고, 역할 기반 권한 · 다중 서버 · 확장 가능 구조를 가집니다.
7
+ **A self-hosted Discord bot that connects an AI coding agent Claude Code or Codex to each channel.** It runs on your own machine, with role-based permissions, multi-server support, and an extensible backend design.
6
8
 
7
- - 현재 지원: **Claude Code**, **Codex**
8
- - 확장: 모드 플러그인 추가로 다른 에이전트(예: opencode) 연결 가능
9
+ - Currently supports: **Claude Code**, **Codex**
10
+ - Extensible: add a mode plugin to connect other agents (e.g. opencode) in the future
9
11
 
10
- > 🚧 **상태: 개발 (Phase 1).** `npx discord-agent-bridge` 로 바로 실행하거나(권장), 아래 **"소스에서 실행"** 으로 받아 쓸 수 있습니다.
12
+ > **Published on npm.** Run it instantly with `npx discord-agent-bridge` (recommended), or install globally / build from source. Supports both **Claude Code** and **Codex** backends.
11
13
 
12
14
  ---
13
15
 
14
- ## 이게 뭐예요?
16
+ ## What is this?
15
17
 
16
- Discord 채널에서 대화하듯 메시지를 보내면, 컴퓨터에서 Claude Code(또는 Codex) 프로젝트 폴더를 대상으로 작업해 주는 봇입니다.
18
+ Send a message in a Discord channel like you're chatting, and Claude Code (or Codex) works on that project's folder from your own computer.
17
19
 
18
- - **채널 = 세션 = 프로젝트 하나.** 채널을 만들 작업 폴더와 백엔드(Claude/Codex)를 정합니다.
19
- - **여러 서버**에 같은 봇을 초대해 있고, **서버/프로젝트마다 설정이 따로** 적용됩니다.
20
- - **역할(Role)로 누가 있는지** 통제합니다.
20
+ - **One channel = one session = one project.** When you create a channel, you set its working folder and backend (Claude/Codex).
21
+ - **Invite the same bot to multiple servers** each server/project gets its own independent configuration.
22
+ - **Roles control who can use it.**
21
23
 
22
24
  ---
23
25
 
24
- ## 준비물
26
+ ## Prerequisites
25
27
 
26
- - **Node.js 20 이상**
27
- - 사용할 백엔드에 맞는 CLI가 **설치 + 로그인**되어 있어야 합니다:
28
- - **Claude 모드** → [Claude Code](https://docs.anthropic.com/en/docs/claude-code) 인증 (`claude` 로그인 또는 `ANTHROPIC_API_KEY`). 사용량/한도 패널을 보려면 **Claude Pro/Max 구독 로그인**이 필요합니다.
29
- - **Codex 모드** → `codex` CLI 설치 + 로그인.
30
- - **Discord 토큰** (아래 1단계에서 발급)
28
+ - **Node.js 20 or later**
29
+ - The CLI for whichever backend you use must already be **installed and logged in**:
30
+ - **Claude mode** → [Claude Code](https://docs.anthropic.com/en/docs/claude-code) authentication (`claude` login, or an `ANTHROPIC_API_KEY`). Viewing the usage/limits panel requires being **logged in with a Claude Pro/Max subscription**.
31
+ - **Codex mode**the `codex` CLI installed and logged in.
32
+ - **A Discord bot token** (create one in Step 1 below)
31
33
 
32
34
  ---
33
35
 
34
- ## 1단계 — Discord 만들기 (Developer Portal)
36
+ ## Step 1 — Create a Discord bot (Developer Portal)
35
37
 
36
- 봇을 직접 하나 만들어야 합니다. 5분이면 됩니다.
38
+ You need to create your own bot. Takes about 5 minutes.
37
39
 
38
- 1. **[Discord Developer Portal](https://discord.com/developers/applications)** 접속 오른쪽 **New Application** → 이름 입력(예: `my-agent-bot`) → **Create**.
39
- 2. 왼쪽 메뉴 **Bot** → **Reset Token** → 나오는 **토큰을 복사**해 안전한 곳에 보관.
40
- - ⚠️ 토큰은 비밀번호입니다. 노출되면 즉시 **Reset Token**으로 재발급하세요.
41
- 3. 같은 **Bot** 아래 **Privileged Gateway Intents**:
42
- - ✅ **MESSAGE CONTENT INTENT** — **필수** (봇이 메시지 내용을 읽어야 )
43
- - ✅ **SERVER MEMBERS INTENT** — 권장 (역할 기반 권한 확인에 사용)
44
- - 켜고 **Save Changes**.
45
- 4. 왼쪽 **OAuth2** → **Client ID(Application ID)** 복사 (셋업에 필요).
46
- 5. **초대 링크 만들기** — OAuth2 → **URL Generator**:
40
+ 1. Go to the **[Discord Developer Portal](https://discord.com/developers/applications)** → top-right **New Application** → enter a name (e.g. `my-agent-bot`) → **Create**.
41
+ 2. Left sidebar **Bot** tab → **Reset Token** → **copy the token** and keep it somewhere safe.
42
+ - ⚠️ This token is a password. If it's ever exposed, reset it immediately with **Reset Token**.
43
+ 3. Still under the **Bot** tab, in **Privileged Gateway Intents**:
44
+ - ✅ **MESSAGE CONTENT INTENT** — **required** (the bot needs to read message content)
45
+ - ✅ **SERVER MEMBERS INTENT** — recommended (used for role-based permission checks)
46
+ - Enable them and **Save Changes**.
47
+ 4. Left sidebar **OAuth2** tabcopy the **Client ID (Application ID)** (needed for setup).
48
+ 5. **Build an invite link** — OAuth2 → **URL Generator**:
47
49
  - **Scopes**: `bot`, `applications.commands`
48
50
  - **Bot Permissions**: `Manage Channels`, `Send Messages`, `Embed Links`, `Attach Files`, `Read Message History`, `Create Public Threads`, `Send Messages in Threads`, `Manage Threads`, `Add Reactions`
49
- - 생성된 URL 브라우저에 붙여넣어 **내 서버에 초대**.
50
- - (셋업 마법사가 초대 링크를 자동 생성해 주기도 합니다 — 2단계 참고.)
51
+ - Paste the generated URL into your browser and **invite it to your server**.
52
+ - (The setup wizard can also generate this invite link for you automatically see Step 2.)
51
53
 
52
54
  ---
53
55
 
54
- ## 2단계설치 & 실행
56
+ ## Step 2 — Install & run
55
57
 
56
- ### npx 실행 (권장)
58
+ ### Run with npx (recommended)
57
59
 
58
- 설치 없이 바로 실행합니다. `npx` 최신 버전을 받아 실행하며, 최초 실행이면 셋업 마법사가 먼저 이어서 봇이 시작됩니다.
60
+ Runs instantly, no install needed. `npx` fetches the latest version and runs it; on first run, the setup wizard appears first and the bot starts right after.
59
61
 
60
62
  ```bash
61
- # 최초 실행셋업 마법사가 자동으로 이어서 봇이 시작됩니다.
62
- # (토큰/Client ID 입력, 인텐트 확인, 초대 링크 생성기본값은 물어봄)
63
+ # First runthe setup wizard runs automatically, then the bot starts.
64
+ # (asks for your token/Client ID, checks intents, generates an invite linkno other defaults are asked)
63
65
  npx discord-agent-bridge
64
66
 
65
- # 이후 실행이미 설정돼 있으면 바로 봇이 시작됩니다.
67
+ # Later runsif already configured, the bot starts directly.
66
68
  npx discord-agent-bridge
67
69
 
68
- # 다시 설정만 하고 싶을 (봇은 시작하지 않음)
70
+ # To reconfigure only (without starting the bot)
69
71
  npx discord-agent-bridge --setup
70
72
  ```
71
73
 
72
- 전역 설치도 가능합니다: `npm install -g discord-agent-bridge` `discord-agent-bridge` / `discord-agent-bridge --setup`.
74
+ Global install also works: `npm install -g discord-agent-bridge`, then `discord-agent-bridge` / `discord-agent-bridge --setup`.
75
+
76
+ ### Upgrading
73
77
 
74
- ### 소스에서 실행
78
+ When a new version is released:
75
79
 
76
80
  ```bash
77
- git clone https://github.com/10000DOO/discord-agent-bridge.git
78
- cd discord-agent-bridge
79
- npm install
80
- npm run build
81
+ # npx users — appending @latest always fetches the newest version (npx can otherwise cache).
82
+ npx discord-agent-bridge@latest
81
83
 
82
- node dist/cli.js # 최초 1회: 셋업 마법사 자동 실행 → 이어서 봇 시작 / 이후: 바로 봇 시작
83
- node dist/cli.js --setup # 설정만 다시 (봇은 시작 안 함)
84
+ # Global-install users
85
+ npm install -g discord-agent-bridge@latest
84
86
  ```
85
87
 
86
- **셋업 마법사(`--setup`)** 물어보는 **토큰(비밀)만 터미널에서 입력**합니다. 그 외 값은 하나도 안 물어봅니다:
87
- 1. Discord 봇 **토큰** (비밀 → 터미널에서만 붙여넣기)
88
- 2. **Client ID**
89
- 3. Message Content Intent 켰는지 확인
90
- 4. 초대 URL 생성 서버에 초대
88
+ Check your installed version with: `discord-agent-bridge --version`.
89
+
90
+ ### Keep it running across reboots (PM2)
91
+
92
+ The simplest way to keep the bot running after logout/reboot is [PM2](https://pm2.keymetrics.io/). It works the same on macOS, Linux, and Windows, and gives you logs, restart, and status in one place.
93
+
94
+ ```bash
95
+ # 1) Install the bot globally (so PM2 has a stable command to run)
96
+ npm install -g discord-agent-bridge
97
+
98
+ # 2) Run --setup once if you haven't yet
99
+ discord-agent-bridge --setup
91
100
 
92
- > **역할도, 기본값도 터미널에서 안 정합니다.** 봇을 서버에 초대한 뒤 Discord에서 **`/config`** 명령으로 설정하세요:
93
- > - **역할 티어** — 역할 이름을 **클릭**해 지정(역할 ID 복사·개발자 모드 불필요). 지정 전에는 **모두 거부(deny-by-default)**.
94
- > - **기본값** — **기본 백엔드·모델·권한 모드·언어(locale)** 는 드롭다운에서 고르면 **바로 저장**되고, **Codex 기본 경로(codexHome)** 는 "Codex 경로 설정" 버튼 → 입력창(모달)에서 지정합니다. 언어는 `한국어 (ko)` / `English (en)` 중에서 선택합니다.
101
+ # 3) Install PM2
102
+ npm install -g pm2
95
103
 
96
- 설정은 `~/.discord-agent-bridge/` 저장됩니다(토큰 파일 권한 600). 역할·기본값은 서버별로 `servers/<guildId>.json` 에 저장됩니다.
104
+ # 4) Register the bot with PM2 and start it
105
+ pm2 start discord-agent-bridge --name discord-agent-bridge
106
+
107
+ # 5) Snapshot the current process list (so PM2 knows what to restore on boot)
108
+ pm2 save
109
+
110
+ # 6) Register PM2 to start at boot (on macOS this wires up launchd)
111
+ pm2 startup
112
+ # ↑ Copy-paste the `sudo ...` command it prints and run it once.
113
+ ```
114
+
115
+ Day-to-day management:
116
+
117
+ ```bash
118
+ pm2 status # is it running?
119
+ pm2 logs discord-agent-bridge # tail logs
120
+ pm2 restart discord-agent-bridge # restart (also do this after upgrading)
121
+ pm2 stop discord-agent-bridge # stop
122
+ pm2 delete discord-agent-bridge # unregister
123
+ ```
124
+
125
+ Upgrading under PM2:
126
+
127
+ ```bash
128
+ npm install -g discord-agent-bridge@latest
129
+ pm2 restart discord-agent-bridge
130
+ ```
131
+
132
+ > ⚠️ If you use nvm/asdf, PM2 needs to find the same `node` at boot time as it does in your shell. Verify with `which node` and make sure that path is available to the boot environment — otherwise PM2 may fail to start the bot on reboot.
133
+
134
+ **What the setup wizard (`--setup`) asks for** — the **token (secret) is the only thing you type into the terminal**. Nothing else is asked here:
135
+ 1. Your Discord bot **token** (secret — paste it only in the terminal)
136
+ 2. Your **Client ID**
137
+ 3. Confirmation that Message Content Intent is enabled
138
+ 4. Generates an invite URL → invite it to your server
139
+
140
+ > **Roles and defaults are never configured in the terminal.** After inviting the bot to your server, configure them in Discord with the **`/config`** command:
141
+ > - **Role tiers** — assign them by **clicking** a role name (no need to copy a role ID or enable Developer Mode). Until assigned, access is **deny-by-default**.
142
+ > - **Defaults** — **default backend, model, permission mode, and language (locale)** are saved instantly from a dropdown; the **Codex base path (codexHome)** is set via the "Set Codex Path" button → a text-input modal. Language choices are `한국어 (ko)` / `English (en)`.
143
+
144
+ Configuration is stored under `~/.discord-agent-bridge/` (token file permissions 600). Per-server roles and defaults are stored in `servers/<guildId>.json`.
97
145
 
98
146
  ---
99
147
 
100
- ## 3단계 — Discord에서 사용하기
148
+ ## Step 3 — Using it in Discord
101
149
 
102
- 봇이 서버에 들어오고 실행 중이면 (권장 순서: **초대 `/init` `/config` → `/agent start`**):
150
+ Once the bot joins a server, it **automatically creates a control channel (`#session-generator`), a sessions category, and a notifications channel (`#agent-status`)** (as long as it has the Manage Channels permission). From there, the flow is: **`/config` → `/agent start`**.
103
151
 
104
- 1. **`/init`** (관리자) 컨트롤 채널(`#session-generator`)과 세션 카테고리를 만듭니다. 다시 실행해도 기존 채널을 재사용합니다(중복 생성 없음).
105
- 2. **`/config`** (관리자) → 역할 티어·기본값을 지정합니다. (서버 관리자(Administrator)는 역할 설정 없이도 항상 사용할 있습니다.)
106
- 3. `#session-generator` 에서 **`/agent start`** → **마법사**가 순서대로 안내합니다:
107
- **작업 폴더 선택백엔드(Claude / Codex) → 모델권한 모드/프로필**. 확인하면 프로젝트 폴더 이름으로 **전용 세션 채널(`proj-<폴더>`) 새로 생성**되고 채널에 바인딩됩니다.
108
- 4. 만들어진 세션 채널에서 **그냥 메시지로 대화**하면 됩니다. Claude 모드는 스트리밍 출력·툴 실행 스레드·권한 승인 버튼이 뜹니다.
109
- 5. 필요할 명령어 사용.
152
+ 1. **(Automatic)** This channel structure is created when the bot starts or is invited to a server. An admin can also recreate it manually with **`/init`** (existing channels are reused — no duplicates).
153
+ 2. **`/config`** (admin) → set role tiers and defaults. (Server Administrators can always use the bot, even without an assigned role.)
154
+ 3. In `#session-generator`, run **`/agent start`** → the **wizard** walks you through, in order:
155
+ **choose a working folder backend (Claude / Codex) → modelreasoning effort permission mode**. Each step advances with a **"Next" button**. The folder browser supports **navigating to parent/other volumes, creating new folders, and resuming a previous session**. Once confirmed, a **dedicated session channel (`proj-<folder>`) is created** and bound to it, named after the project folder.
156
+ 4. In the newly created session channel, **just chat with normal messages**. Claude mode shows streaming output, tool-execution threads, and permission approval buttons.
157
+ 5. Use the commands below whenever you need them.
110
158
 
111
- ### 주요 명령어
112
- | 명령어 | 설명 |
159
+ ### Key commands
160
+ | Command | Description |
113
161
  |---|---|
114
- | `/init` | (관리자) 컨트롤 채널 + 세션 카테고리 생성 (재실행 재사용) |
115
- | `/agent start` | 세션 시작마법사 확인 전용 세션 채널을 새로 생성 |
116
- | `/agent resume` | 이전 세션 이어하기 |
117
- | `/agent close` | 세션 종료 + 세션 채널 삭제 |
118
- | `/mode <claude\|codex>` | 백엔드 전환 (⚠️ 대화로 시작 이전 맥락 미승계) |
119
- | `/mode perm <모드\|프로필>` | 권한 모드/프로필 전환 (세션 유지) |
120
- | `/stop` | 현재 세션 즉시 중단 ( 스위치) |
121
- | `/stop-all` | (관리자) 모든 세션 중단 |
122
- | `/config` | (관리자) 역할 티어 + 기본값(백엔드·모델·권한 모드·언어·Codex 경로) 설정 — 역할은 **클릭**, 기본값은 드롭다운/모달에서 지정 |
123
-
124
- ### 권한 모드 (세션이 얼마나 자율적인지)
125
- - `default` 도구 실행 전마다 **Allow/Deny 버튼**으로 확인 (가장 안전)
126
- - `acceptEdits` — 파일 수정은 자동 수락
127
- - `plan` — 먼저 계획만 세우고 실행은 보류
128
- - `bypassPermissions` — 전부 자동 (신뢰하는 프로젝트에서만)
129
-
130
- (Codex는 CLI의 승인·샌드박스 모드로 매핑됩니다.)
162
+ | `/init` | (admin) Create the control channel + sessions category (reuses them if already present) |
163
+ | `/agent start` | Start a new session creates a dedicated session channel once the wizard is confirmed |
164
+ | `/agent resume` | Resume a previous session |
165
+ | `/agent close` | End the session and delete its session channel |
166
+ | `/agent stats` | View active sessions, session statistics, and Claude usage (visible only to you) |
167
+ | `/mode <claude\|codex>` | Switch backend (⚠️ starts a new conversation — prior context is not carried over) |
168
+ | `/mode perm <mode\|profile>` | Switch permission mode/profile (session context is preserved) |
169
+ | `/stop` | Immediately stop the current session (kill switch) |
170
+ | `/stop-all` | (admin) Stop all sessions |
171
+ | `/config` | (admin) Configure role tiers + defaults (backend, model, permission mode, language, Codex path) — roles are set by **clicking**, defaults via dropdown/modal |
172
+
173
+ ### Permission modes (how autonomous a session is)
174
+ - `default` — confirms every tool execution with **Allow/Deny buttons** (safest)
175
+ - `acceptEdits` — file edits are accepted automatically
176
+ - `plan` — only plans first, holds off on execution
177
+ - `bypassPermissions` — fully automatic (only for projects you trust)
178
+
179
+ (Codex maps these to the CLI's own approval/sandbox modes.)
180
+
181
+ ### Event notifications (`#agent-status`)
182
+
183
+ Summarizes **completions and errors** from all your sessions into a single `#agent-status` channel. Toggle it on/off and change the target channel from `/config` → **🔔 Notification Settings**.
131
184
 
132
185
  ---
133
186
 
134
- ## 권한 & 역할 설정 (중요)
187
+ ## Permissions & role setup (important)
135
188
 
136
- 봇은 **당신 PC에서, 당신 계정 권한으로** 코드를 실행합니다. 봇에게 명령할 있는 사람은 **당신 컴퓨터에서 명령을 실행할 있는 사람**입니다. 그래서 역할 통제가 필수입니다.
189
+ This bot runs code **on your machine, with your account's permissions**. That means anyone who can command the bot is effectively **someone who can run commands on your computer** — so role-based access control is essential.
137
190
 
138
- - **역할 티어 3단계** — Discord에서 **`/config`** 역할 이름을 **클릭**해 지정합니다(역할 ID·개발자 모드 불필요). admin ⊇ execute ⊇ read-only:
139
- - **admin** — 설정/`stop-all`/`config` 등 관리
140
- - **execute** — 세션 시작·명령 실행
141
- - **read-only** — 읽기만
142
- - > `/config` 처음엔 **서버 관리자(Administrator)** 권한이 있는 사람만 있고(허용 목록이 비어 있어도 부트스트랩 가능), 이후엔 admin 티어도 사용할 있습니다.
143
- - **기본은 거부(deny-by-default)** — 허용 목록에 없는 사람은 아무것도 합니다. `/config` 지정하기 전에는 아무도 실행할 수 없습니다.
144
- - **프로젝트별 접근 제어(ACL)** — 특정 프로젝트를 지정한 역할/사람만 쓰게 있습니다.
145
- - **감사 로그**누가 언제 무엇을 했는지 `~/.discord-agent-bridge/audit/` 에 기록됩니다.
191
+ - **3 role tiers**assign them in Discord via **`/config`** by **clicking** a role name (no role ID or Developer Mode needed). admin ⊇ execute ⊇ read-only:
192
+ - **admin** — manages settings/`stop-all`/`config`
193
+ - **execute** — can start sessions and run commands
194
+ - **read-only** — read access only
195
+ - > `/config` can initially only be opened by someone with **server Administrator** permission (bootstraps even with an empty allow-list); afterward, the admin tier can use it too.
196
+ - **Deny-by-default** — anyone not on the allow-list can do nothing. Until you configure it via `/config`, no one can run anything.
197
+ - **Per-project access control (ACL)** — restrict a specific project to only the roles/people you designate.
198
+ - **Audit log**who did what and when is recorded in `~/.discord-agent-bridge/audit/`.
146
199
 
147
- > ⚠️ **보안 주의:** 신뢰하지 않는 서버에 봇을 초대하거나 execute 역할을 너무 넓게 주지 마세요. 작업 폴더 (예: `~/.ssh`) 봇이 접근하지 못하도록 기본 차단되어 있습니다.
200
+ > ⚠️ **Security note:** Don't invite the bot to servers you don't trust, and don't grant the execute role too broadly. Access outside the working folder (e.g. `~/.ssh`) is blocked by default.
148
201
 
149
202
  ---
150
203
 
151
- ## Claude 모드 vs Codex 모드
204
+ ## Claude mode vs. Codex mode
152
205
 
153
- | | Claude 모드 | Codex 모드 |
206
+ | | Claude mode | Codex mode |
154
207
  |---|---|---|
155
- | 실시간 스트리밍 | ✅ | ❌ (최종 결과 위주) |
156
- | 실행 스레드 | ✅ | ❌ |
157
- | 권한 승인 버튼 | ✅ | ❌ (승인/샌드박스 모드로 대체) |
158
- | 세션 이어하기 | ✅ | ✅ |
159
- | **사용량/한도 표시** | ✅ (5시간·주간·컨텍스트) | ❌ (Codex CLI 제약) |
208
+ | Real-time streaming | ✅ | ❌ (final result only) |
209
+ | Tool-execution threads | ✅ | ❌ |
210
+ | Permission approval buttons | ✅ | ❌ (replaced by approval/sandbox modes) |
211
+ | Session resume | ✅ | ✅ |
212
+ | **Usage/limits display** | ✅ (5-hour · weekly · context) | ❌ (Codex CLI limitation) |
213
+
214
+ ### Is this the same as using the terminal?
215
+
216
+ - **Claude mode** — uses the **same engine** as the `claude` terminal (the official Claude Agent SDK). It reads the project's `.claude/` configuration as-is, so **subagents, skills, hooks, and MCP all behave identically**. The only difference is the **presentation**: input comes from Discord messages, output renders as embeds/threads. (TUI-only slash commands you'd type in the interactive terminal are handled through the SDK's mechanism rather than the TUI's own.)
217
+ - **Codex mode** — runs via `codex exec` (non-interactive). It loads the same Codex engine with your config/MCP, and we've **empirically confirmed hooks (SessionStart/UserPromptSubmit/Stop, etc.) fire correctly in non-interactive mode too**. Approval flow is mapped differently than interactive mode, though (see Permission modes above).
160
218
 
161
- ### 터미널에서 쓰던 거랑 똑같나요?
219
+ ### Custom slash commands / skills / plugin commands
162
220
 
163
- - **Claude 모드** 터미널의 `claude`와 **같은 엔진**(공식 Claude Agent SDK)을 사용합니다. 프로젝트의 `.claude/` 설정을 그대로 읽어 **서브에이전트·스킬·훅·MCP가 동일하게** 동작하도록 만듭니다. 달라지는 입력이 Discord 메시지, 출력이 임베드/스레드라는 **표현 방식**뿐입니다. (터미널에서 타이핑하는 TUI 전용 슬래시 명령은 그대로 치는 방식이 아니라 SDK 방식으로 처리됩니다.)
164
- - **Codex 모드** — `codex exec`(비대화형)로 구동합니다. 같은 Codex 엔진에 설정/MCP를 로드하지만, **비대화형 모드가 인터랙티브 모드와 일부 다를 수 있어**(승인 방식·특정 기능 등) **서브에이전트·스킬·MCP가 그대로 되는지는 Phase 2에서 실제 `codex` CLI로 검증**한 뒤 확정합니다. 검증 전까지는 완전 동일하다고 보장하지 않습니다.
221
+ Messages you send in a session channel are forwarded to Claude/Codex verbatim, so **commands/skills defined under `.claude/commands/`, `.claude/skills/` (Claude) or `.codex/skills/` (Codex), as well as commands installed by plugins**, work exactly as they do in the terminal — just type `/name` as-is (verified against the real Claude/Codex CLIs). This doesn't conflict with the bot's own Discord slash commands (`/agent`, `/config`, etc.) since it's just a plain text message in a session channel.
165
222
 
166
223
  ---
167
224
 
168
- ## 설정 파일 위치
225
+ ## Configuration file locations
169
226
 
170
227
  ```
171
228
  ~/.discord-agent-bridge/
172
- ├─ config.json # 토큰·Client ID·기본값·한도 (권한 600)
173
- ├─ servers/<guildId>.json # 서버별 역할 티어·기본값 + /init 채널 구조(control/sessions) ID (권한 600)
174
- ├─ state.json # 채널↔세션 바인딩 (재시작 자동 복구)
175
- └─ audit/audit.jsonl # 감사 로그
229
+ ├─ config.json # bot token · Client ID · defaults · limits (permissions 600)
230
+ ├─ servers/<guildId>.json # per-server role tiers · defaults · channel structure (control/sessions/status) IDs · notification settings (permissions 600)
231
+ ├─ state.json # channel↔session bindings (auto-restored after restart)
232
+ └─ audit/audit.jsonl # audit log
176
233
  ```
177
- 설정은 **전역 서버프로젝트** 순으로 덮어써집니다.
234
+ Configuration is overridden in the order **global server project**.
178
235
 
179
236
  ---
180
237
 
181
- ## 문제 해결
238
+ ## Troubleshooting
182
239
 
183
- - **봇이 메시지에 반응하지 않아요**Developer Portal에서 **Message Content Intent**가 켜져 있는지 확인.
184
- - **슬래시 명령이 보여요**초대 `applications.commands` 스코프를 포함했는지 확인(등록에 걸릴 있음).
185
- - **권한 오류로 채널 생성 실패**봇에게 `Manage Channels` 권한이 있는지 확인.
186
- - **사용량 패널이 떠요** → Claude Pro/Max **구독 로그인**(`~/.claude`) 상태여야 합니다. API 키만 쓰면 패널은 숨겨집니다(정상).
240
+ - **The bot doesn't respond to messages** Check that **Message Content Intent** is enabled in the Developer Portal.
241
+ - **Slash commands don't show up** Check that you included the `applications.commands` scope when inviting the bot (registration can take a few minutes).
242
+ - **Channel creation fails with a permission error** Check that the bot has the `Manage Channels` permission.
243
+ - **The usage panel doesn't appear** You need to be **logged in with a Claude Pro/Max subscription** (`~/.claude`). This panel is hidden (as expected) if you're only using an API key.
244
+ - **"No authorized role for this actor (fail-secure)."** → The account you signed in with has no role on the allow-list. This is deny-by-default. Fix it with one of these:
245
+ 1. **Simplest** — give that account Discord's **server Administrator** permission. Administrators are unconditionally treated as the admin tier and bypass the allow-list.
246
+ 2. **Assign a listed role** — in the Discord server's member list, give the account one of the roles that's already tied to a tier under `/config`.
247
+ 3. **Add the role to a tier** — from an admin account, open `/config` → **Role tiers** and click the account's role into the tier you want (admin/execute/read-only).
187
248
 
188
249
  ---
189
250
 
190
- ## 개발
251
+ ## Development
191
252
 
192
253
  ```bash
193
254
  npm install
194
- npm run dev # tsx watch (개발 모드)
195
- npm run typecheck # 타입 검사
196
- npm run test # 테스트 (vitest)
255
+ npm run dev # tsx watch (dev mode)
256
+ npm run typecheck # type checking
257
+ npm run test # tests (vitest)
197
258
  ```
198
259
 
199
- ## 라이선스
260
+ ## License
200
261
 
201
262
  MIT
package/dist/app.js CHANGED
@@ -13,7 +13,7 @@ import { SessionOrchestrator } from './core/sessionOrchestrator.js';
13
13
  import { createLogger } from './core/logger.js';
14
14
  import { ClaudeMode } from './modes/claude/index.js';
15
15
  import { CodexMode } from './modes/codex/index.js';
16
- import { getClaudeModels, getClaudeModelsCachedOrFallback, getCodexModels } from './core/providerCatalog.js';
16
+ import { getClaudeModels, getCodexModels } from './core/providerCatalog.js';
17
17
  import { MessageRouter } from './discord/messageRouter.js';
18
18
  import { InteractionRouter } from './discord/interactionRouter.js';
19
19
  import { SessionWiring } from './discord/wiring.js';
@@ -126,12 +126,13 @@ export function createApp(deps) {
126
126
  // Per-backend model options from the central provider catalog (§ providerCatalog).
127
127
  // Codex: a documented static default list (Codex has no model-list API; -m is
128
128
  // free-form), with config.defaults.codexModel offered first when set. Claude:
129
- // the SDK's supportedModels(), fetched once after login and CACHED this render
130
- // returns the cached English list if present, else the alias fallback while the
131
- // async fetch warms the cache for the next render (never blocks the ack).
132
- modelsFor: (backend) => backend === 'codex'
129
+ // the SDK's supportedModels(), probed live on EVERY /config or /agent start open
130
+ // (no cross-invocation cache) so a model added or removed on the account is
131
+ // reflected immediately. A short in-tick de-dupe still shares one probe across
132
+ // concurrent callers. On failure/timeout falls back to the alias list.
133
+ modelsFor: async (backend) => backend === 'codex'
133
134
  ? getCodexModels(config.defaults.codexModel)
134
- : getClaudeModelsCachedOrFallback({ logger }),
135
+ : await getClaudeModels({ logger }),
135
136
  });
136
137
  const discord = new DiscordClient({
137
138
  clientId: config.discord.clientId,
@@ -148,10 +149,6 @@ export function createApp(deps) {
148
149
  for (const binding of channelRegistry.list().filter((b) => !b.archived)) {
149
150
  await wiring.attach(binding.guildId, binding.channelId, binding.mode);
150
151
  }
151
- // Warm the Claude model cache now that auth is available (fire-and-forget): the
152
- // SDK's supportedModels() is fetched once and cached so the first /config or
153
- // /agent start shows the real, current model list instead of the alias fallback.
154
- void getClaudeModels({ logger });
155
152
  logger.info('boot complete', { guilds: client.guilds.cache.size });
156
153
  },
157
154
  // Auto-provision each guild's channel structure on ready / guild-join so /init is
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -61,6 +61,8 @@ export class ConfigResolver {
61
61
  codexHome: global.defaults.codexHome,
62
62
  codexCliCommand: global.defaults.codexCliCommand,
63
63
  codexCliVersion: global.defaults.codexCliVersion,
64
+ claudeEffort: global.defaults.claudeEffort,
65
+ codexEffort: global.defaults.codexEffort,
64
66
  limits: { ...global.limits },
65
67
  };
66
68
  // Level 2: server override (only the fields §8.1 allows a server to set).
@@ -72,6 +74,8 @@ export class ConfigResolver {
72
74
  permissionMode: server.defaults?.permissionMode,
73
75
  permissionProfile: server.defaults?.permissionProfile,
74
76
  codexHome: server.defaults?.codexHome,
77
+ claudeEffort: server.defaults?.claudeEffort,
78
+ codexEffort: server.defaults?.codexEffort,
75
79
  limits: server.limits,
76
80
  });
77
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"configResolver.js","sourceRoot":"","sources":["../../src/core/configResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configResolver.js","sourceRoot":"","sources":["../../src/core/configResolver.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,12 @@ export const configSchema = z.object({
43
43
  codexHome: z.string(),
44
44
  codexCliCommand: z.string(),
45
45
  codexCliVersion: z.string().nullable(),
46
+ // Reasoning effort per backend. Optional: an unset value defers to each mode's
47
+ // own default (Claude SDK's EffortLevel default; Codex CLI's config.toml
48
+ // model_reasoning_effort). The wizard / `/config` panel offer per-backend option
49
+ // lists narrowed by the SDK's supportedEffortLevels when reported.
50
+ claudeEffort: z.string().optional(),
51
+ codexEffort: z.string().optional(),
46
52
  }),
47
53
  limits: z.object({
48
54
  maxSessionsPerUser: z.number(),
@@ -86,6 +92,8 @@ export const serverConfigSchema = z.object({
86
92
  permissionMode: permModeSchema,
87
93
  permissionProfile: z.string().nullable(),
88
94
  codexHome: z.string(),
95
+ claudeEffort: z.string(),
96
+ codexEffort: z.string(),
89
97
  })
90
98
  .partial()
91
99
  .optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/core/configSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/core/configSchema.ts"],"names":[],"mappings":"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"}