Releases: RightNow-AI/openfang
v0.6.9 — security patches
Security patches (RUSTSEC advisories that broke v0.6.8 CI):
rustls-webpki0.103.10 → 0.103.13:- RUSTSEC-2026-0104 — reachable panic in CRL parsing
- RUSTSEC-2026-0098 — name constraints for URI names incorrectly accepted
- RUSTSEC-2026-0099 — wildcard name constraints accepted incorrectly
wasmtime43.0.1 → 43.0.2:- RUSTSEC-2026-0114 — panic allocating a table exceeding host address space
Maintenance:
cargo fmtapplied workspace-wide (CI Format gate green)
All v0.6.8 fixes carried forward:
- #1097 workspace state_dir split
- #1085 dashboard WS auth aligned with HTTP middleware
- #1038 skill_list / skill_describe / skill_execute agent tools
- #995 Requesty provider added
- #1154 OLLAMA_HOST / LMSTUDIO_HOST env override
- #1170 require_signed wired through POST /api/skills/install
- #1174 POST /api/audit/append endpoint
- #1172 HAND.toml SHA-256 to Merkle audit chain
- #780 Telegram message_thread_id routing
- Codex installer findings: CRLF/BOM, package.json, symlink, TOCTOU all closed
v0.6.8
Fixes:
- #1097 workspace state_dir split — private state stays under
~/.openfang/, user workspace untouched - #1085 dashboard WS auth aligned with HTTP middleware
- #1038
skill_list/skill_describe/skill_executeagent tools (replaces filesystem fallback) - #1170
require_signedwired throughPOST /api/skills/installwithallowed_signer_keysallow-list - #1174
POST /api/audit/appendendpoint for instance-side wrapper audit integration - #1172 HAND.toml SHA-256 auto-logged to Merkle audit chain on every load
- #780 Telegram
message_thread_idrouting per-topic to named agents - Codex audit findings on installer.rs binding check closed:
- CRLF and UTF-8 BOM normalization on both sides of compare
package.jsonadded to manifest candidate list- symlink and canonicalization escape protection
- TOCTOU closed via private staging dir plus atomic rename
Providers:
- #995 Requesty added (
https://router.requesty.ai/v1) with 5 catalog entries - #1154
OLLAMA_HOST/LMSTUDIO_HOST/VLLM_HOST/LEMONADE_HOSTenv override for local providers
PR dispositions:
- closed: #1185, #1166, #1162, #1055, #1044, #1039, #969
- held pending external rebase: #1151, #997, #1093, #946 (all reviewed clean)
- author rework requested: #943 (IDOR on session endpoints)
Tests: 2696+ across 14 crates, 0 clippy warnings.
v0.6.7: Reconnect, Uninstall, Stop, Shell Env, TTS URLs
Resolves 7 community issues. 2657 tests passing, zero clippy warnings, zero regressions.
Web Dashboard
- #1179 WebSocket reconnects to the active agent after page refresh. localStorage persists the agent id, init restores it, history hydrates from
/api/agents/{id}/session. - #1163 Uninstall an agent from chat. New
DELETE /api/agents/{id}/uninstallremoves the in-memory entry plus the~/.openfang/agents/<name>/directory. Red Uninstall button next to Stop in both the chat header and the agent detail modal. Path-traversal rejected.
Kernel
- #1164 Agent Stop now deactivates the owning hand. Hand-owned agents no longer hit "Hand already active" on re-activation. WS
/stopcommand mirrors the same path.
Runtime
- #1169
shell_execenv passthrough. Newexec_policy.shell_env_passthroughVec with aliasesenv_passthroughandenv_allowlist. Wildcard"*"forwards every parent env var. Tested across the merge helper and 10 deser cases. - #1051 TTS and image generation base URLs configurable.
media.tts_openai_base_url,media.tts_elevenlabs_base_url,media.image_gen_base_url. Same pattern asaudio_base_urlfrom v0.6.4. Local OpenAI-compat services for Whisper, TTS, and DALL-E flavors all swappable now. 8 new tests.
Skills
- #1170 Backend
InstallOptions::require_signedenforces Ed25519 signature verification at install time. Allowed-signer pubkey allowlist supported. CLI wiring pending follow-up.
Docs
- #1173 Docker host-gateway and curl-equipped reference image documented in troubleshooting.md and getting-started.md. docker-compose.yml has a commented
extra_hosts:baseline.
PR review activity
- 4 PRs merged in round 7-8 (#1147 channel_id binding, #1143 Discord images, #1176 Shift+Enter, #1168 LaTeX render).
- 8 PRs closed as abandoned or unfit (#1115, #1116, #1117, #1066, #1057, #1030, #1050, #1056, #1046).
- #1055 caught smuggling an X-Frame-Options regression in a metering-named PR. Request-changes posted.
Stats
- 2657 tests passing (+32 from v0.6.6)
- Zero clippy warnings (
--workspace --all-targets) - Zero regressions
Full Changelog: v0.6.6...v0.6.7
v0.6.6: Discord Images, vLLM 0.19, create_directory, Bindings
Resolves 11 community issues and 7 PRs merged across drivers, channels, and dashboard. 2625 tests passing, zero clippy warnings, zero regressions.
LLM Drivers
- #1157 vLLM 0.19+
reasoningfield support. The driver now reads bothreasoning(new) andreasoning_content(legacy) and emits both on the wire, keeping agentic loops working across vLLM upgrades and other OpenAI-compatible servers.
Channels
- #1142 PR #1143 Discord image attachments surface to text-only providers as a caption + image multipart, so models without vision still get the caption text instead of seeing the image silently dropped.
- #1144 PR #1147 channel_id binding hardening. Single source of truth for routing, adapter allowlist,
deny_unknown_fieldson AgentBinding and BindingMatchRule. 14 new tests. - #1141 PR #1176 Shift+Enter inserts a newline in the chat input. Plain Enter still sends.
Tools
- #1134 New
create_directorytool. Routes through workspace sandbox with path traversal protection. 13 aliases (mkdir, make_directory, create_folder, etc.) wired in tool_compat.
Web Dashboard
- #1167 PR #1168 LaTeX math now renders in chat messages via the lazy-loaded KaTeX bundle. CSP updated for jsdelivr.
- #1140 Chat tab now lists agents from
~/.openfang/agents/. Boot scans the directory after DB restore and registers anyagent.tomlthe DB didn't know about. Bad TOML logged and skipped, never aborts boot.
Investigations and Design
- #1097 Workspaces unintended behavior documented (multi-component refactor scope, design comment posted).
- #1149 OpenAI Responses API migration design-only (affects 26 providers, separate driver gated by flag recommended).
Quick closes
- #1048 MiniMax setup answered.
- #1152 Update command pointed to openfang.sh/update.
- #1153 Chinese localization dedupe to #1186.
- #1155 0.0.0.0 bind documented in v0.6.5, comment added.
- #1156 Agent-as-tool already supported via agent_send.
- #1159 Server install pointed to docs.
- #1161 Website restored.
Stats
- 2625 tests passing (+40 from v0.6.5)
- Zero clippy warnings (
--workspace --all-targets) - Zero regressions
Full Changelog: v0.6.5...v0.6.6
v0.6.5: Agent Wakeup, Server IDs, cloneAgent
Resolves 8 community issues + 3 PRs merged from trusted contributors. 2585 tests passing, zero clippy warnings, zero regressions.
Agents
- #890 New
agent_activatetool andPOST /api/agents/{id}/activateendpoint. Orchestrator agents can wake suspended or crashed peers. Idempotent on Running, rejects Terminated. - #868 cloneAgent API.
POST /api/agents/{template_id}/clonedeep-clones a template, applies overrides, assigns a fresh agent ID and workspace path. ExcludesMEMORY.mdso the new agent starts fresh. - #869 Server-assigned message IDs. Every
Messagenow carries a UUID v4msg_idstamped at construction, plus an optionalprovider_msg_idfor debugging. Legacy on-disk sessions get fresh IDs on first load.
Web Dashboard
- #1026 Inferencing indicator. Live pulse next to agents currently calling the LLM. Computed from
running_tasksDashMap. - #931 Providers screen overhauled. Search, filter by status, group by category (frontier / oss / aggregator / regional / local), configured providers first.
- #915 Telegram
user_idsurfaced.metadata.telegram_user_idand prompt prefix[From: Name (tg_id:NNN)]give agents a stable per-user identifier.
Channels
- #1146 Lenient binding parse. One malformed binding entry no longer drops the entire bindings table. Bad entries are logged at ERROR and dropped, survivors pass through.
Docs
- #1097 Workspaces gap documented (multi-component refactor needed, design comment posted).
- #1037 follow-up.
docs/configuration.mdauth posture wording corrected. Middleware fail-closes on authenticated routes but a small set of public routes (health, static, OAuth callback) remain reachable so the login page can render.OPENFANG_ALLOW_NO_AUTHopt-in still required for open access. - #1175 Getting-started doc links fixed.
Dependencies
- open 5.3.3 to 5.3.4
Stats
- 2585 tests passing (+42 from v0.6.4)
- Zero clippy warnings (
--workspace --all-targets) - Zero regressions
Full Changelog: v0.6.4...v0.6.5
v0.6.4 — Firefox, OpenRouter Free, CachyOS Installer
This release resolves 4 community-reported issues. 2543 tests passing, zero clippy warnings, zero regressions.
Web Dashboard
- #1036 Sidebar opens in Firefox. Replaced
template x-if + div x-transitionpattern (broken in Firefox) withx-show + x-cloak. All five nav sections now render correctly. CSSx-cloakrule prevents flash of unstyled content during Alpine init.
Providers
- #1032 OpenRouter free now usable. The
openrouter/freealias pointed tollama-3.1-8b-instruct:freewhich OpenRouter does not route to tool-supporting backends, so requests failed with"No endpoints found that support tool use". Repointed tollama-3.3-70b-instruct:free. Added 5 verified tool-capable free models:llama-3.3-70b-instruct:free,qwen3-coder:free,gpt-oss-120b:free,gpt-oss-20b:free,glm-4.5-air:free. Addedopenrouter/free-coderandopenrouter/free-largealiases.
Installer
- #1107 Fish shell config no longer wedged on CachyOS / Arch. Installer writes to
~/.config/fish/conf.d/openfang.fish(drop-in dir, auto-sourced) instead of appending bash syntax toconfig.fish. Wraps PATH line inif test -dso a missing install dir cannot break fish startup. Self-heals legacy lines fromconfig.fishif present. Same root cause as #261, #319, #372.
Docs
- #1037
docs/configuration.mdandopenfang.toml.exampleexpanded. New "Exposing the Dashboard" section with working docker-compose example,OPENFANG_HOMEpath resolution, port-must-match note, and security warning about non-loopback binds with theOPENFANG_ALLOW_NO_AUTHopt-in.
Stats
- 2543 tests passing (+3 from v0.6.3)
- Zero clippy warnings (
--workspace --all-targets) - Zero regressions
Full Changelog: v0.6.3...v0.6.4
v0.6.3 — Reasoning Models, Slack Dedup, Hot-Reload
This release resolves 4 bugs across LLM drivers, channels, and kernel hot-reload, plus a CI tooling bump. 2540 tests passing, zero clippy warnings, zero regressions.
LLM Drivers
- #1098 Reasoning models retain state across turns. Thinking blocks are now parsed, persisted, and replayed across all three drivers (Anthropic with
thinking_signature, Gemini reasoning, OpenAI o1/o3). Round-trip tests added. Models like Claude Sonnet extended thinking, Gemini 2.5 Flash, DeepSeek R1, Qwen, GPT o1 no longer lose reasoning state between turns.
Channels
- #1103 Slack
envelope_iddeduplication. Socket Mode events now dedup against a 60s TTL cache (10000-entry soft cap). Connection rotation no longer causes double-processing of the same event. - #1133 Telegram
REACTION_TOO_MANYremoved from terminal-error list. The transient rate-limit reaction error is no longer cached as permanent rejection. Future reactions land once the cap clears.
Kernel
- #1129 Subprocess timeout hot-reload. Edits to
subprocess_timeout_secsindefault_modelandfallback_providersnow propagate without restart. Follow-up to #1128 in v0.6.1.
CI
- #1061
softprops/action-gh-releasebumped from v2 to v3 (Node 24 runtime).
Stats
- 2540 tests passing (+23 from v0.6.2)
- Zero clippy warnings (
--workspace --all-targets) - Zero regressions
Full Changelog: v0.6.2...v0.6.3
v0.6.2 — 8 Bug Fixes + 4 Dep Bumps
This release resolves 8 community-reported issues and ships 4 dependency bumps. All changes verified with cargo clippy clean and 2517 tests passing.
Security
- #1060 SSRF protection unified for WASM host calls. IPv6 bracket form parsed correctly. Adds Alibaba and Azure metadata IP blocks. Honours
ssrf_allowed_hostson the WASM path. CIDR allowlist support. - #1132
exec_policy.mode = "full"now actually takes effect. Edits to~/.openfang/config.tomlpropagate to existing agents on restart instead of being silently ignored by the cached DB value.
Channels
- #1100 Telegram errors propagate.
send_message,send_photo,send_document,send_voice,send_locationall returnErron HTTP failure instead of warn-and-Ok. Terminal reaction errors cached per chat to avoid retry loops. - #1095 MCP stdio servers get
HOME,TMP,TEMPenv vars on Linux and macOS. FixesEACCESerrors withnpx-based MCP servers. - #1058 Trader hand dashboard CSS fixed.
position: relativeon.trader-chart-panelconfines the empty-state overlay correctly. - #1127
BindingMatchRule.channel_idfield added withserde(default). Channel-scoped routing now supported. Struct also gainsdeny_unknown_fields.
Code Quality
- #1091 Five clippy warnings fixed.
collapsible_matchin gemini, openai drivers and 13 CLI files.sort_byreplaced withsort_by_key+Reversein session_repair. - #1126 Provider env tests stabilised. New
EnvVarGuardwith shared mutex prevents the cross-test race that flakedNOVITA_API_KEYassertions.
Dependencies
- uuid 1.23.0 to 1.23.1
- rustls 0.23.37 to 0.23.39
- libc 0.2.183 to 0.2.185
- lettre 0.11.20 to 0.11.21
Stats
- 2517 tests passing
- Zero clippy warnings (
--workspace --all-targets) - Zero regressions
Full Changelog: v0.6.1...v0.6.2
v0.6.1 — 12 Bug Fixes
This release resolves 12 community-reported issues across kernel, channels, runtime, and the dashboard. All fixes verified with cargo clippy clean and 2497 tests passing.
Kernel & Heartbeat
- #1102 Heartbeat now exempts idle reactive agents. No more false Crashed transitions for agents waiting on input.
- #1089 Streaming agent loop stamps
last_activebefore the LLM call. Prevents heartbeat false-positives on slow local models. - #1087 Agent config syncs the full set of fields from
agent.tomlon restart. Kernel-assignedworkspaceand inheritedexec_policyare preserved when the TOML omits them.
Channels
- #1120 Router default-agent map keyed on
user_idinstead ofchannel_id. Fixes Discord and Slack multi-tenancy collision. - #1081 Lark websocket respects the
regionsetting. International users no longer hit the wrong server. - #1088, #1064 Cron job results now broadcast to chat WebSocket clients in real time.
Runtime
- #1128
claude-codedriver subprocess timeout is configurable viaDriverConfig.subprocess_timeout_secsand theOPENFANG_SUBPROCESS_TIMEOUT_SECSenv var. - #1051 Audio transcription base URL is configurable via
media.audio_base_url. Works with local OpenAI-compatible Whisper backends. TTS and image-gen URL overrides are still pending.
Init & Build
- #1079 MiniMax now appears in
openfang initprovider list. - #1092 NixOS flake build fixed. Adds
nativeBuildInputs,wrapGAppsHook3, andlibayatana-appindicatorruntime closure.
Code Quality
- #1121 Workspace passes
cargo fmt --all --check. CI gate strengthened to enforce it across all crates.
Stats
- 2497 tests passing
- Zero clippy warnings (
--workspace --all-targets) - All fixes live-tested with a running daemon and real Groq calls where applicable
- Tauri desktop config bumped so
.dmgand.msifilenames track the release version
Full Changelog: v0.6.0...v0.6.1
v0.6.0 — Fan-out Cron, Skill Templates, Command Registry
Three Hermes-inspired capabilities ported to OpenFang's Rust architecture. Each wired end-to-end: backend + API + dashboard + (where applicable) TUI. 51 new tests, zero clippy warnings, zero regressions across 2460+ workspace tests.
Features
Multi-destination cron delivery
Cron jobs fan out results to multiple targets in one declaration:
- Channel — any of the 40 existing channel adapters (Telegram, Slack, Discord, WhatsApp, Matrix, Teams, …)
- Webhook — POST JSON
{job, output, timestamp}with optionalAuthorizationheader - LocalFile — path + append/overwrite flag
- Email — with subject template support
Per-target failures log but never abort the job. Edit targets through the Scheduler dashboard page or the new PUT /api/schedules/{id} endpoint.
Skill config injection
Skills are now templates. Declare config vars in SKILL.md frontmatter:
config:
github_token:
description: GitHub personal access token
env: GITHUB_TOKEN
required: true
default_branch:
description: Default branch name
default: main
required: falseResolver order per var: user config.toml → env var → default → error if required missing. Secrets auto-redacted in the rendered skill prompt (*_token, *_key, *_secret, password). Manage through the new Skills page Configure modal, or [skills.<name>] in config.toml.
Unified slash command registry
All 32 slash commands live in one source of truth with categories, aliases, and per-surface filtering (CLI / Channel / Web). Auto-generated help, autocomplete, and the new GET /api/commands endpoint for dashboard consumption. Prevents command drift across CLI, web chat, Telegram, Slack, Discord, and 37 other channels.
API additions
GET /api/commands?surface=web|cli|channel|allGET/POST/PUT /api/schedulesnow round-tripdelivery_targetsGET /api/schedules/{id}/delivery-logGET /api/skills/{id}/configPUT /api/skills/{id}/configDELETE /api/skills/{id}/config/{var_name}
Improvements
- Atomic
config.tomlwriter (tempfile + rename) prevents corruption on crash - Kernel
skill_config_overridesenables live config updates without restart - Fixed 4 pre-existing clippy warnings (
manual_contains) - Tauri desktop config bumped so
.dmg/.msifilenames now match the release version (no moreOpenFang_0.5.9_…on a 0.6.0 release)
Testing
- 51 new tests (cron_delivery 16, commands 18, config_injection 10, API integration 7)
- All 2460+ workspace tests pass
cargo clippy --workspace --all-targets -- -D warnings— zero warnings- Live daemon integration verified for each feature
Full diff: v0.5.10...v0.6.0