EJClaw๋ Discord ์์์ ๋์ํ๋ Tribunal ๋ฉํฐ์์ด์ ํธ ๊ฐ๋ฐ ๋ณด์กฐ ์์คํ ์ ๋๋ค. ์ฌ์ฉ์ ์์ฒญ์ owner๊ฐ ๋ฐ๊ณ , reviewer๊ฐ ์๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํํ๋ฉฐ, ํ์ํ ๋ arbiter๊ฐ ๊ต์ฐฉ์ ์ ๋ฆฌํฉ๋๋ค.
์๋ณธ์ qwibitai/nanoclaw์์ ์ถ๋ฐํ์ง๋ง, ํ์ฌ๋ EJClaw์ Discord/paired-runtime ๊ตฌ์กฐ์ ๋ง๊ฒ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ง๋๊ณ ์์ต๋๋ค.
- ๋จ์ผ
ejclaw์๋น์ค๊ฐ owner / reviewer / arbiter ์ธ ์ญํ ๊ณผ ์ธ Discord ๋ด์ ํจ๊ป ๊ด๋ฆฌํฉ๋๋ค. - ์ฌ์ฉ์ ์ง์ ์ ์ owner ํ๋์ด๋ฉฐ, reviewer์ arbiter๋ ๋ด๋ถ ์ญํ ๋ก ๋์ํฉ๋๋ค.
- room-level ์ค์ ์
room_settings๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ฉฐ,assign_room์ด ๊ณต๊ฐ assignment ์ธํฐํ์ด์ค์ ๋๋ค. - reviewer๋ owner์ ํ์ฌ worktree๋ฅผ direct mount๋ก ์ฝ๊ณ , role-scoped read-only ๋ณดํธ๋ฅผ ์ ์ฉ๋ฐ์ต๋๋ค.
- paired runtime์ SQLite(WAL), stable owner worktree, turn/lease ์ถ์ , host verification์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- Tribunal 3-์์ด์ ํธ ๋ฃจํ: owner / reviewer / arbiter
- Mixture of Agents(MoA): ์ธ๋ถ ๋ชจ๋ธ ์๊ฒฌ์ arbiter ํ๋จ์ ์ฃผ์
- ์ญํ ๋ณ agent type / model / effort ์ค์
- role-fixed Discord ๋ด 3๊ฐ ์ฒด๊ณ
- reviewer host runtime + read-only guard
- ์น์ธ ํ ๋ณ๊ฒฝ ๊ฐ์ง์ ์ฌ๋ฆฌ๋ทฐ
- Claude ์ฅ์ ์ Codex๋ก ๋๊ธฐ๋ global failover
- Claude OAuth ๋ฉํฐ ํ ํฐ ๋กํ ์ด์
assign_room๊ธฐ๋ฐ ๋ช ์์ room assignment- Bun + SQLite ๊ธฐ๋ฐ ๋น ๋ฅธ ๋ฐํ์
| ์ญํ | ํ์ฌ ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
|---|---|---|
| Owner | room๋ณ owner_agent_type (๊ธฐ๋ณธ Codex) |
์ฌ์ฉ์ ์์ฒญ ์ฒ๋ฆฌ, ์ฝ๋ ์์ฑ, ์ต์ข ์๋ต |
| Reviewer | ์ ์ญ REVIEWER_AGENT_TYPE (๊ธฐ๋ณธ Claude Code) |
owner ๊ฒฐ๊ณผ ๋นํ์ ๋ฆฌ๋ทฐ, ํ๊ท ๊ฒ์ฆ |
| Arbiter | ์ ์ญ ARBITER_AGENT_TYPE (์ต์
) |
owner/reviewer ๊ต์ฐฉ ์ ํ์ |
์ฌ์ฉ์ ๋ฉ์์ง
โ Owner ์๋ต
โ Reviewer ์๋ ์คํ
โ verdict:
DONE โ Owner finalize โ ์๋ฃ
DONE_WITH_CONCERNS โ Owner ์์ โ ์ฌ๋ฆฌ๋ทฐ ๋ฃจํ
BLOCKED/NEEDS_CONTEXT
โโ Arbiter enabled โ Arbiter ํ์
โโ Arbiter disabled โ ์ฌ์ฉ์๋ก ์์ค์ปฌ๋ ์ด์
โ ์๋ณต์ด ๋์ ๋๋ฉด arbiter ์๋ ์์ฒญ ๊ฐ๋ฅ
MoA๊ฐ ์ผ์ ธ ์์ผ๋ฉด arbiter๊ฐ ํ์ ํ๊ธฐ ์ ์ Kimi, GLM ๊ฐ์ ์ธ๋ถ ๋ชจ๋ธ ์๊ฒฌ์ ๋ณ๋ ฌ ์์งํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ arbiter ํ๋กฌํํธ์ ์ฃผ์ ํฉ๋๋ค. ์ต์ข ํ์ ์ ์ฌ์ ํ EJClaw arbiter๊ฐ ๋ด๋ฆฝ๋๋ค.
ํ์ฌ room ์ค์ ์ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
room_settings: room-level SSOTroom_role_overrides: owner / reviewer / arbiter ์ญํ ๋ณ overridepaired_projects: canonical project rootpaired_workspaces: ์ค์ owner / reviewer ์คํ workspaceregistered_groups: ์์ ํ ์ ๊ฑฐ๋์ง๋ ์์์ง๋ง, canonical source๊ฐ ์๋๋ผ compatibility/read-model ์ฑ๊ฒฉ์ผ๋ก ๋จ์ ์๋ ๋ ์ด์ด
์ด์์ ์ผ๋ก๋:
singleโ owner๋ง ์คํtribunalโ owner + reviewer + optional arbiter
์ค์ํ ์ :
- reviewer๋ ๋ ์ด์ snapshot copy๋ฅผ ๊ธฐ๋ณธ ์คํ ๊ฒฝ๋ก๋ก ์ฐ์ง ์์ต๋๋ค.
- reviewer๋ owner์ ํ์ฌ workspace๋ฅผ direct mount๋ก ์ฝ์ต๋๋ค.
- stale reviewer workspace ๋ ์ฝ๋๊ฐ ๋จ์ ์์ด๋ ์คํ ์ง์ owner ํ์ฌ ๊ฒฝ๋ก๋ก ์ฌ๋๊ธฐํ๋ฉ๋๋ค.
Discord โโโบ SQLite (WAL) โโโบ GroupQueue โโโฌโโโบ Owner (host process)
โ โ
โ โผ
โโโโบ Reviewer (host process, read-only)
โ โ
โ verdict routing
โ โโ DONE โ finalize
โ โโ feedback โ owner loop
โ โโ BLOCKED โ arbiter / user
โ
โโโโบ Arbiter (on-demand, fresh session)
โ โ
โ โโโโโดโโโ MoA โโโโ
โ โ Kimi / GLM โ
โ โ ์๊ฒฌ ์์ง โ
โ โโโโโโโโโโโโโโโโโ
โ
IPC follow-up / host tools
โ
โโโโโโโโโโโ Router โโโโโโโโโโโ
โผ โผ
paired_turn_outputs Discord display
- Linux(Ubuntu 22.04+) ๋๋ macOS
- Bun 1.3+
- Claude Code CLI
- Codex CLI
- Discord ๋ด ํ ํฐ 3๊ฐ(owner / reviewer / arbiter)
git clone https://github.com/phj1081/EJClaw.git
cd EJClaw
bun install
bun run build:all.env.example๋ฅผ ๊ธฐ์ค์ผ๋ก.env๋ฅผ ์์ฑํฉ๋๋ค.- ์ ์ฒด ํค ์ค๋ช ์ docs/configuration.md๋ฅผ ๋ด ๋๋ค.
- ์ต์ํ ์๋๋ ๋จผ์ ์ฑ์์ผ ํฉ๋๋ค.
DISCORD_OWNER_BOT_TOKEN=
DISCORD_REVIEWER_BOT_TOKEN=
DISCORD_ARBITER_BOT_TOKEN=
CLAUDE_CODE_OAUTH_TOKENS=
OWNER_AGENT_TYPE=codex
REVIEWER_AGENT_TYPE=claude-codebun run devbun run deploy์ด ์คํฌ๋ฆฝํธ๋ ๋ค์์ ์์๋๋ก ์ํํฉ๋๋ค.
- ์ต์ ์ปค๋ฐ fast-forward pull
- ์ ์ฒด build
migrate-room-registrations์คํsystemctl --user restart ejclaw
bun run build
bun run build:runners
bun run test
bun run typecheck
bun run check- docs/architecture.md โ ๋ฐ์ดํฐ ๋ชจ๋ธ, ์คํ ํ๋ฆ, ์ฃผ์ ํ์ผ
- docs/configuration.md โ
.envํค์ ๋๋ฒ๊น ๊ฒฝ๋ก - docs/legacy-compat-removal-spec.md โ ๋จ์ ์๋ ๋ ๊ฑฐ์ ์ ๊ฑฐ ๊ณํ
- CHANGELOG.md โ ๋ฆด๋ฆฌ์ฆ ์ด๋ ฅ
MIT
