freshcrate
Home > Frameworks > EJClaw

EJClaw

Tribunal multi-agent Discord bot framework โ€” autonomous paired review with configurable agent roles

Description

Tribunal multi-agent Discord bot framework โ€” autonomous paired review with configurable agent roles

README

EJClaw

Version Claude Agent SDK Codex SDK Bun Discord

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 ๊ธฐ๋ฐ˜ ๋น ๋ฅธ ๋Ÿฐํƒ€์ž„

Tribunal ์‹œ์Šคํ…œ

์—ญํ•  ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
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

MoA๊ฐ€ ์ผœ์ ธ ์žˆ์œผ๋ฉด arbiter๊ฐ€ ํŒ์ •ํ•˜๊ธฐ ์ „์— Kimi, GLM ๊ฐ™์€ ์™ธ๋ถ€ ๋ชจ๋ธ ์˜๊ฒฌ์„ ๋ณ‘๋ ฌ ์ˆ˜์ง‘ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ arbiter ํ”„๋กฌํ”„ํŠธ์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ํŒ์ •์€ ์—ฌ์ „ํžˆ EJClaw arbiter๊ฐ€ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.

๋ฐฉ ์„ค์ • ๋ชจ๋ธ

ํ˜„์žฌ room ์„ค์ •์˜ ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • room_settings: room-level SSOT
  • room_role_overrides: owner / reviewer / arbiter ์—ญํ• ๋ณ„ override
  • paired_projects: canonical project root
  • paired_workspaces: ์‹ค์ œ owner / reviewer ์‹คํ–‰ workspace
  • registered_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-code

์‹คํ–‰

bun run dev

๋ฐฐํฌ

bun run deploy

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์Œ์„ ์ˆœ์„œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ตœ์‹  ์ปค๋ฐ‹ fast-forward pull
  2. ์ „์ฒด build
  3. migrate-room-registrations ์‹คํ–‰
  4. systemctl --user restart ejclaw

๊ฐœ๋ฐœ

bun run build
bun run build:runners
bun run test
bun run typecheck
bun run check

๋ฌธ์„œ

๋ผ์ด์„ ์Šค

MIT

Release History

VersionChangesUrgencyDate
v0.2.1## Changed - Claude / Codex SDK๋ฅผ ์ตœ์‹  patch/minor ์ˆ˜์ค€์œผ๋กœ ๊ฐฑ์‹ ํ•˜๊ณ  runner ์˜์กด์„ฑ์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. - reviewer ๊ฒ€์ฆ ๊ธฐ์ค€๊ณผ continuation/checklist mode ๊ณ„ํš ๋ฌธ์„œ๋ฅผ ํ˜„์žฌ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ## Fixed - stale reviewer workspace ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‚จ์•„ ์žˆ์„ ๋•Œ reviewer๊ฐ€ ํ˜„์žฌ owner worktree ๋Œ€์‹  ์˜› ๊ฒฝ๋กœ๋ฅผ ๋ณด๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. - reviewer ํ”„๋กฌํ”„ํŠธ๋ฅผ `EJCLAW_WORK_DIR` ๊ธฐ์ค€ ๊ฒ€์ฆ์œผ๋กœ ๊ณ ์ •ํ•ด canonical clone์„ ๋‹จ๋… ๊ทผ๊ฑฐ๋กœ ์˜คํŒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. - stale owner run์ด buffered progress flush, tracked progress send/edit๋ฅผ ์™ธ๋ถ€๋กœ ์ƒˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. - Claude SDK `task_*` ์ด๋ฒคํŠธ๊ฐ€ nested/internal task๊นŒ์ง€ ๋ณ„๋„ subagent์ฒ˜๋Ÿผ ํ‘œ์‹œ๋˜๋˜High4/13/2026
v0.2.0 ### Added - owner / reviewer / arbiter ๊ธฐ๋ฐ˜ Tribunal 3-์—์ด์ „ํŠธ ํ๋ฆ„ ์ •๋น„ - MoA(Mixture of Agents) ๊ธฐ๋ฐ˜ ์™ธ๋ถ€ ๋ชจ๋ธ ์˜๊ฒฌ ์ˆ˜์ง‘ - `assign_room` ๊ธฐ๋ฐ˜ room assignment ๋ชจ๋ธ๊ณผ `room_settings` SSOT ์ •์ฐฉ - ์—ญํ• ๋ณ„ model / effort / fallback ์„ค์ • - reviewer host runtime read-only guard ๋ฐ host verification ๊ฒฝ๋กœ - Claude OAuth ๋ฉ€ํ‹ฐ ํ† ํฐ ๋กœํ…Œ์ด์…˜ ### Changed - reviewer๋Š” owner workspace๋ฅผ direct mount๋กœ ์ฝ๋Š” ํ˜„์žฌ ๋ชจ๋ธ๋กœ ์ •๋ฆฌ - final delivery ๊ฒฝ๋กœ๋ฅผ ๋‹จ์ผํ™”ํ•ด duplicate final ๋ฐฐ๋‹ฌ ๋ฌธ์ œ๋ฅผ ์ค„์ž„ - startup precondition์„ ์ „์šฉ ์˜ค๋ฅ˜ / exit code ์ฒด๊ณ„๋กœ ์ •๋ฆฌํ•ด crash loop๋ฅผ ๋ง‰์Œ - deploy ๊ณผ์ •์— `migratHigh4/11/2026
v0.1.0# EJClaw v0.1.0 First independent release of EJClaw, forked from nanoclaw. ## Highlights ### Tribunal 3-Agent System - Owner/Reviewer/Arbiter tri-agent architecture - On-demand arbiter summoning on deadlock detection - Both owner and reviewer can summon arbiter (BLOCKED/NEEDS_CONTEXT) - Mixture of Agents (MoA) โ€” external model opinions from Kimi/GLM ### Discord-Independent Inter-Agent Communication - `paired_turn_outputs` table for direct agent-to-agent data passing - Discord is display-onlyMedium3/30/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

nexuThe simplest desktop client for OpenClaw ๐Ÿฆž โ€” bridge your Agent to WeChat, Feishu, Slack & Discord in one click. Works with Claude Code, Codex & any LLM. BYOK, Oauth, local-first, chat from your phonev0.1.12
Perplexity-Comet-MCPNo descriptionmain@2026-04-21
dorabotmacOS app for 24/7 AI agents in an IDE with memory, scheduled tasks, browser use + access to Whatsapp, Telegram, Slack.v0.2.87
oh-my-piโŒฅ AI Coding agent for the terminal โ€” hash-anchored edits, optimized tool harness, LSP, Python, browser, subagents, and morev14.1.2
awesome-agent-skills-mcp๐Ÿ”ง Enhance agent skills with the Awesome Agent Skills MCP Server, providing powerful tools for managing and optimizing agent functionality.main@2026-04-21