From 34c9ecd10b033e82fc28e5f3a681777939df72ca Mon Sep 17 00:00:00 2001 From: Eyejoker Date: Thu, 26 Mar 2026 11:37:30 +0900 Subject: [PATCH] docs: update README to reflect current architecture and features Add multi-account token rotation, provider fallback, CI monitoring, usage dashboard. Fix Codex description (SDK, not app-server). Add Authentication section with setup-token instructions. Co-Authored-By: Claude Opus 4.6 --- README.md | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e4a4e52..b1c8750 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Originally derived from [qwibitai/nanoclaw](https://github.com/qwibitai/nanoclaw Two AI agents running as parallel systemd services on a single host: - **Claude Code** (`@claude`) — Anthropic Agent SDK, adaptive thinking, Opus/Sonnet -- **Codex** (`@codex`) — OpenAI Codex app-server (JSON-RPC), GPT-5.4, xhigh reasoning +- **Codex** (`@codex`) — OpenAI Codex SDK (`codex exec`), GPT-5.4, xhigh reasoning Both share the same codebase (`dist/index.js`), differentiated by environment variables. No containers — direct host processes for zero overhead. @@ -24,7 +24,10 @@ Both share the same codebase (`dist/index.js`), differentiated by environment va - **Browser automation** — [gstack browse](https://github.com/garrytan/gstack) skill, headless Chromium daemon, ~100ms/command - **Voice transcription** — Groq Whisper (primary) / OpenAI Whisper (fallback), shared file cache with dedup - **Bidirectional images** — receive Discord attachments as multimodal input, send screenshots back -- **MCP integration** — Memento (persistent cross-session memory) +- **Provider fallback** — Claude 429 → configurable fallback provider (e.g. Kimi K2.5) with cooldown +- **CI monitoring** — `watch_ci` MCP tool for GitHub Actions run polling (structured fast path, no LLM token cost) +- **Usage dashboard** — real-time token usage and service status overview +- **MCP integration** — Memento (persistent memory) + EJClaw host tools (send_message, schedule_task, watch_ci, etc.) - **Skill sync** — single source of truth, auto-synced to all agent sessions - **Priority queue** — per-group serialization, global concurrency limit - **Session persistence** — resume conversations across restarts @@ -35,7 +38,7 @@ Both share the same codebase (`dist/index.js`), differentiated by environment va ``` Discord ──► SQLite (WAL) ──► GroupQueue ──┬──► Claude Code (Agent SDK, MessageStream) - └──► Codex (App-Server, JSON-RPC) + └──► Codex (Codex SDK, codex exec) │ IPC polling ◄── follow-up messages (mid-turn steering) │ @@ -74,11 +77,24 @@ npm run build # .env DISCORD_BOT_TOKEN= # Discord bot token ASSISTANT_NAME=claude # Bot trigger name (@claude) -CLAUDE_CODE_OAUTH_TOKEN= # Claude Code OAuth token +CLAUDE_CODE_OAUTH_TOKEN= # Claude Code OAuth token (primary) +CLAUDE_CODE_OAUTH_TOKENS= # Comma-separated tokens for multi-account rotation OPENAI_API_KEY= # For Codex GROQ_API_KEY= # Voice transcription (Groq Whisper) + +# Provider fallback (optional) +FALLBACK_PROVIDER_NAME= # e.g. kimi +FALLBACK_BASE_URL= # e.g. https://api.kimi.com/coding +FALLBACK_AUTH_TOKEN= # Fallback provider API key +FALLBACK_MODEL= # e.g. kimi-k2.5 ``` +### Authentication + +Multi-account OAuth token rotation is supported via `CLAUDE_CODE_OAUTH_TOKENS` (comma-separated). When one account hits a rate limit, the system automatically rotates to the next. + +Token auto-refresh runs on the Claude service only, refreshing access tokens 30 minutes before expiry using rotating refresh tokens from `~/.claude/.credentials.json` (account 0) and `~/.claude-accounts/{n}/.credentials.json` (account 1+). Generate tokens with `claude setup-token` (account 0) or `CLAUDE_CONFIG_DIR=~/.claude-accounts/{n} claude setup-token` (account 1+). + ### Systemd Services (Linux) ```bash