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 <noreply@anthropic.com>
This commit is contained in:
24
README.md
24
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:
|
Two AI agents running as parallel systemd services on a single host:
|
||||||
|
|
||||||
- **Claude Code** (`@claude`) — Anthropic Agent SDK, adaptive thinking, Opus/Sonnet
|
- **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.
|
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
|
- **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
|
- **Voice transcription** — Groq Whisper (primary) / OpenAI Whisper (fallback), shared file cache with dedup
|
||||||
- **Bidirectional images** — receive Discord attachments as multimodal input, send screenshots back
|
- **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
|
- **Skill sync** — single source of truth, auto-synced to all agent sessions
|
||||||
- **Priority queue** — per-group serialization, global concurrency limit
|
- **Priority queue** — per-group serialization, global concurrency limit
|
||||||
- **Session persistence** — resume conversations across restarts
|
- **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)
|
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)
|
IPC polling ◄── follow-up messages (mid-turn steering)
|
||||||
│
|
│
|
||||||
@@ -74,11 +77,24 @@ npm run build
|
|||||||
# .env
|
# .env
|
||||||
DISCORD_BOT_TOKEN= # Discord bot token
|
DISCORD_BOT_TOKEN= # Discord bot token
|
||||||
ASSISTANT_NAME=claude # Bot trigger name (@claude)
|
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
|
OPENAI_API_KEY= # For Codex
|
||||||
GROQ_API_KEY= # Voice transcription (Groq Whisper)
|
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)
|
### Systemd Services (Linux)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
Reference in New Issue
Block a user