Releases: RightNow-AI/openfang
v0.3.0
Fix #214: Static assets (logo, favicon, agent.json) no longer return 401 when API key is set Fix #218: Schedule POST now validates agent_id and rejects empty values instead of silently falling back Fix #210: Discord intents default changed from 33280 to 37376 to include DIRECT_MESSAGES Fix #213: ClawHub install now returns 429 TOO_MANY_REQUESTS instead of masking rate limits as 500 Fix #211: GPT-5 and o-series models now use max_completion_tokens with automatic retry detection Fix #212: provider_urls from config.toml now flow through to all LLM driver creation paths Fix #186: Cron create CLI sends proper nested schedule/action JSON structure with required name field Fix #206: Added hand check-deps, install-deps, pause, and resume CLI commands
v0.2.9
Fix schedule runner single-turn: tools never called in cron/schedule agent turns (#187)
Fix schedule runner ignores per-agent model override (#181)
Add web_fetch POST/PUT/PATCH/DELETE support with headers and body (#184)
Add ClawHub response caching to prevent 429 rate limiting (#191)
Fix Telegram 409 conflict on restart by calling deleteWebhook first (#156)
Fix config set writes invalid top-level keys that break deserialization (#183)
Make default_model hot-reloadable without restart, add catalog dropdowns (#203)
Fix Visual Builder SVG drag-drop rendering with manual createElementNS (#201)
v0.2.8
Fix context_budget panic on out-of-bounds message/block indices with char boundary validation.
Fix SSE streaming parsing to handle both "data: " and "data:" prefixes across all 3 LLM drivers.
Fix FallbackDriver to switch model names when falling back across providers.
Fix TOML spawn overrides so explicit model/provider in manifest is not replaced by config.toml defaults.
Inject current date into agent system prompt so LLMs know today's date.
Remove phantom gemini-3-flash model and point flash/gemini-flash aliases to gemini-2.5-flash.
Add serde aliases for exec_policy mode: "allow"/"all"/"unrestricted" for Full, "restricted" for Allowlist, "none"/"disabled" for Deny.
Change Discord allowed_guilds from Vec to Vec to handle large guild IDs without overflow.
v0.2.7
Fixes
- #174 Fix Unicode byte offset panic in HTML→Markdown conversion — replaced
to_lowercase()pattern with ASCII case-insensitive find to prevent panics on multi-byte Unicode (İ, ẞ) - #173 Fix dashboard hands status badge — all 4 status variants (Active/Paused/Error/Inactive) now show correct badge colors with action hints
- #172 Add
X-API-Keyheader support — auth middleware now acceptsX-API-Keyas fallback alongsideAuthorization: Bearer - #171 Fix hand deactivation orphan agent cleanup — orphaned agents (from failed activations) are now found by
hand:tag and killed on deactivate - #155 Improve shell_exec error messages — blocked commands now show the current exec_policy mode and how to fix it; shell_exec removed from tool list when mode=Deny
- #128, #64 Duplicate ClawHub parse errors — already fixed in v0.2.6
v0.2.6
Fix #153: Model switch now clears canonical session to prevent memory poisoning across providers
Fix #154: SOUL.md code blocks stripped before system prompt injection to prevent LLM copying raw code
Fix #157: Workspace paths use agent name only instead of name-UUID format
Fix #112 #146: ClawHub TUI parser handles {"items": [...]} API response wrapper
Fix #72: Per-agent tool allowlist and blocklist with GET/PUT /api/agents/{id}/tools endpoints
Fix #108: Model prefix normalization strips provider from model ID (openrouter/deepseek/chat becomes provider=openrouter model=deepseek/chat)
Fix #159: DELETE /api/agents/{id}/history endpoint clears all conversation history
Fix #150: PUT /api/budget/agents/{id} endpoint for runtime budget updates
Fix #151: default_model from config.toml now applied to agents on restart
Fix #160: Rate-limited LLM drivers fall through to next fallback instead of failing immediately
Fix #86: CLI agent set subcommand for changing model via command line
WebUI: Model switch button, Clear History button, and Tool Filters panel added to agent detail modal
v0.2.5
Fixes
- Rate limit fallback — rate-limited/overloaded providers now fall through to next model in the fallback chain instead of retrying the same provider 3 times (#160)
- Clear agent history —
DELETE /api/agents/{id}/historyclears all sessions + canonical memory (#159) - Model prefix normalization —
openrouter/deepseek/deepseek-chatstored asmodel=deepseek/deepseek-chat, provider=openrouter(#108) - Budget config override — global
[budget]in config.toml now overrides default per-agent limits on spawn/restore (#150) - Per-agent budget API —
PUT /api/budget/agents/{id}for runtime budget limit updates - default_model on restart — changing
[default_model]in config.toml now applies to existing agents on daemon restart (#151) - CLI agent set —
openfang agent set <id> model <value>command (#86)
Features
- Agent Comms UI — topology tree, live event feed (SSE), send message + post task modals in dashboard and TUI
- Peer awareness — agents see sibling agents in system prompt and can use
agent_send/agent_list - Uninstall command —
openfang uninstallwith--keep-config, Windows PATH cleanup, deferred self-delete
Stats
- 1,828 tests passing
- 0 clippy warnings
- 12 files changed, 807 insertions
v0.2.4
v0.2.3
Fixes #55: Cron scheduler no longer fires every minute. compute_next_run now offsets by +1 second so jobs respect their actual schedule. Fixes #100: OpenRouter model prefix stripped before API call. Models like openrouter/google/gemini-2.5-flash now send the correct ID to the provider. Fixes #83: Added OPENFANG_LISTEN env var override for Docker containers where 0.0.0.0 binding is needed. Fixes #51: Dashboard auth prompt now detects 401 correctly by checking a protected endpoint. Added /api/workflows and /api/logs/stream to the public allowlist. Fixes #65: Added 6 new OpenRouter models including free tier Llama 3.3 70B, Mistral 7B, Gemma 2 9B, Qwen 2.5 72B, and DeepSeek V3. Fixes #68: Approval policy require_approval field now accepts boolean shorthand. false clears the list, true defaults to shell_exec. Fixes #63 #47 #49: Custom model support via POST /api/models/custom. Persisted to disk, loaded on boot, with dashboard UI for adding models.
v0.2.2
Fixes: - Fix cross-provider model switching (MiniMax, Gemini, all providers) - resolve_driver() no longer passes wrong API key when switching providers - Add provider inference from model name prefix for uncataloged models - Add MiniMax-M2.5 to model catalog (Frontier tier) Features: - GitHub Copilot OAuth device flow login - OpenAI Codex provider with credential sync - Claude Code CLI backend driver
v0.2.1
Fixes
- Cron scheduler re-firing every ~1min (#55):
upcoming()→after()to skip current second, removed double-compute inrecord_success, fixed UTF-8 panic inrecord_failure [approval_policy]config silently ignored (#68): Added serde alias so both[approval]and[approval_policy]work in config.toml- Dashboard approve/reject buttons returning 401 (#51, #46): Added
/api/approvals/prefix to public auth allowlist