<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 涼風羽月</title>
    <description>The latest articles on DEV Community by 涼風羽月 (@suzukazehaduki).</description>
    <link>https://dev.to/suzukazehaduki</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3800664%2F4406f701-89a1-4db9-9b6c-6dfae12365e3.jpg</url>
      <title>DEV Community: 涼風羽月</title>
      <link>https://dev.to/suzukazehaduki</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/suzukazehaduki"/>
    <language>en</language>
    <item>
      <title>LibreFang 2026.9.14 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Fri, 16 Oct 2026 05:38:38 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026914-released-11ed</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026914-released-11ed</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.9.14 Released
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;v2026.9.14 is a milestone release&lt;/strong&gt; bringing autonomous goal execution, multi-instance channels, per-agent reasoning modes, and comprehensive configuration tooling to the dashboard and CLI. This release stabilizes the agent-authoring experience while closing several security boundaries and fixing 50+ bugs.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;203 PRs from 5 contributors since v2026.8.30.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Autonomous Goal Execution &amp;amp; Goals System
&lt;/h2&gt;

&lt;p&gt;Agents can now drive themselves through iterative tasks without human invocation. A goal defines what success looks like; LibreFang auto-spawns a disposable worker agent that runs the goal, optionally spawns a verifier that judges each iteration, and learns from tagged markers (&lt;code&gt;GOAL_LEARNED: &amp;lt;text&amp;gt;&lt;/code&gt;) it encounters along the way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New in this release:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;librefang goal "&amp;lt;description&amp;gt;"&lt;/code&gt; CLI command with &lt;code&gt;--loop-engineering&lt;/code&gt; mode for automated verification&lt;/li&gt;
&lt;li&gt;Goals screen in the TUI with wizard-driven creation and live phase tracking&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/goal&lt;/code&gt; slash command in Telegram and Slack&lt;/li&gt;
&lt;li&gt;Dashboard Goals page with phase badges and outcome visibility&lt;/li&gt;
&lt;li&gt;Per-goal &lt;code&gt;evaluator_model&lt;/code&gt; to judge completion, plus auto-generated skills from captured learnings&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Agent Types: Manifests as First-Class Citizens
&lt;/h2&gt;

&lt;p&gt;Agent types (reusable manifests) moved from &lt;code&gt;templates/&lt;/code&gt; to the canonical &lt;code&gt;agent-types/&lt;/code&gt; directory and gained full CRUD support. Create, edit, and delete types from the dashboard Agent Types page instead of hand-editing TOML. Types can now be promoted directly to the public registry as a GitHub PR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related improvements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard Agent Types page with card grid, Quick Run for ephemeral spawns&lt;/li&gt;
&lt;li&gt;Shared Folders editor on agent type and instance details&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;librefang agent new&lt;/code&gt; discovers types in the flat canonical store&lt;/li&gt;
&lt;li&gt;Registry sync resolves both legacy &lt;code&gt;agents/&lt;/code&gt; and new &lt;code&gt;agent-types/&lt;/code&gt; directories&lt;/li&gt;
&lt;li&gt;Source template origin tracked on every agent spawned from a type&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Channel Multi-Instance Support
&lt;/h2&gt;

&lt;p&gt;A single channel adapter (Telegram, Slack, etc.) can now run as multiple named instances, each with its own configuration, secrets namespace, and assigned agent. Manage instances from the dashboard Channels screen or the TUI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-instance secret namespacing prevents credential sharing between bots&lt;/li&gt;
&lt;li&gt;Collision detection rejects names that would map to the same namespace&lt;/li&gt;
&lt;li&gt;Add/configure/delete UI on both dashboard and TUI&lt;/li&gt;
&lt;li&gt;Instance name and per-instance agent binding in config forms&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Per-Agent Reasoning Mode &amp;amp; Extended Thinking
&lt;/h2&gt;

&lt;p&gt;DeepSeek V4 and OpenRouter-routed models now respect per-agent reasoning-mode settings. Agents can be configured to run with &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;low&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, or &lt;code&gt;max&lt;/code&gt; reasoning effort. The Anthropic driver now handles current Claude models (5, Sonnet 5, Opus 4.8+) which removed sampling parameters and moved extended thinking to a new schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;reasoning_mode&lt;/code&gt; settable per agent, globally, or per task&lt;/li&gt;
&lt;li&gt;Provider-aware translation: DeepSeek gets &lt;code&gt;thinking&lt;/code&gt; fields, OpenRouter gets nested &lt;code&gt;reasoning&lt;/code&gt;, others get top-level &lt;code&gt;reasoning_effort&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Adaptive thinking on Claude (effort comes from &lt;code&gt;reasoning_mode&lt;/code&gt; alone, no separate budget)&lt;/li&gt;
&lt;li&gt;Fallback chain &lt;code&gt;model = "default"&lt;/code&gt; now resolves correctly&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuration, Credentials &amp;amp; Vaults
&lt;/h2&gt;

&lt;p&gt;The operator experience for configuration just got significantly better. The dashboard gains a schema-driven config editor; the vault write API lets surfaces store credentials securely; and editing flows now validate and report failures instead of silently accepting bad input.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's new:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard Config page with per-field editable rows derived from &lt;code&gt;GET /api/config/schema&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;TUI Settings screen gains Configuration tab with real-time validation&lt;/li&gt;
&lt;li&gt;Vault write API: &lt;code&gt;GET /api/vault/keys&lt;/code&gt;, &lt;code&gt;PUT /api/vault/keys/{key}&lt;/code&gt;, &lt;code&gt;DELETE /api/vault/keys/{key}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Vault reads show effective source: &lt;code&gt;environment&lt;/code&gt;, &lt;code&gt;vault&lt;/code&gt;, or &lt;code&gt;unset&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Dashboard Channels settings are writable again&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Model Management &amp;amp; Parameters
&lt;/h2&gt;

&lt;p&gt;Every model parameter now uses the same control everywhere it appears. Context window, max output tokens, temperature, top-p, and the two penalties are now consistently editable with shared presets and bounds checking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improvements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;context_window&lt;/code&gt; and &lt;code&gt;max_output_tokens&lt;/code&gt; are editable per agent from the API, CLI, TUI, and dashboard&lt;/li&gt;
&lt;li&gt;Model parameter overrides survive registry syncs (schema v56)&lt;/li&gt;
&lt;li&gt;Per-model limits show effective value vs. catalog figure&lt;/li&gt;
&lt;li&gt;Unsupported parameters (e.g., &lt;code&gt;reasoning_effort&lt;/code&gt; on a gateway that doesn't support it) are stripped and retried transparently&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Memory System Hardening
&lt;/h2&gt;

&lt;p&gt;Automatic memory scoping now closes three holes that let memories leak across boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;capabilities.memory_read = []&lt;/code&gt; now blocks substrate recall and context-engine injection (not just auto-retrieve)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;capabilities.memory_write = []&lt;/code&gt; blocks the per-turn writer, not just extraction&lt;/li&gt;
&lt;li&gt;Per-turn writer stamps both &lt;code&gt;chat_scope&lt;/code&gt; and &lt;code&gt;session_scope&lt;/code&gt; so raw dialogue respects agent isolation&lt;/li&gt;
&lt;li&gt;Full-text-index rebuilds on UPDATEs that cannot change indexed content (access-count bumps, decay sweeps)&lt;/li&gt;
&lt;li&gt;Session and cron compaction run on the agent's own model chain, not the kernel default&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dashboard &amp;amp; TUI Enhancements
&lt;/h2&gt;

&lt;p&gt;The UX got smoother everywhere. Failed operations now report what the daemon said instead of generic lines. The dashboard shows real values for configuration settings instead of cached placeholders. The TUI's goal detail panel, memory config editor, and every error message is now precise and actionable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard login survives daemon restart (session tokens now restored correctly)&lt;/li&gt;
&lt;li&gt;Agent detail drawer shows injected token footprint and last five LLM calls&lt;/li&gt;
&lt;li&gt;Memory tab shows resolved extraction model and provenance&lt;/li&gt;
&lt;li&gt;Workflow run detail shows step progress (&lt;code&gt;current_step_index&lt;/code&gt;, &lt;code&gt;total_steps&lt;/code&gt;, per-step variables)&lt;/li&gt;
&lt;li&gt;Goals page shows autonomous run phase badges (finished, rate-limited, stopped, etc.)&lt;/li&gt;
&lt;li&gt;Slider tick legends now position labels at their true values, not evenly spaced&lt;/li&gt;
&lt;li&gt;Provider page shows real availability status, not a stale cached state&lt;/li&gt;
&lt;li&gt;Add button re-enabled on Channels page after first instance is configured&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bug Fixes &amp;amp; Stability
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;50+ bugs fixed&lt;/strong&gt;, including critical issues that affected real deployments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Memory consolidation&lt;/strong&gt; no longer merges memories across different peers, chats, or sessions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool loop guard&lt;/strong&gt; now detects repeated identical results and refuses the call after three runs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming replies&lt;/strong&gt; with malformed tool-call markup are replaced with an honest sentence instead of sent raw to channels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network byte quota&lt;/strong&gt; now actually enforces &lt;code&gt;[resources] max_network_bytes_per_hour&lt;/code&gt; (was accepted but ignored)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker sandbox&lt;/strong&gt; container pooling now works (was created and destroyed per call)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow step prompts&lt;/strong&gt; expanded in single pass (order-independent, no iteration on substituted values)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron schedule editing&lt;/strong&gt; no longer reverts to defaults when no changes made&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sidecar channel delete&lt;/strong&gt; now removes every adapter instance, not guessed ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Config reload&lt;/strong&gt; correctly reports what actually took effect (not applied work it withheld)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session streaming&lt;/strong&gt; no longer wedges the daemon on message-history compaction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approval routing&lt;/strong&gt; now properly scoped to requesting agent's configured channels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows launcher&lt;/strong&gt; (librefang.exe) no longer stack-overflows on startup&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security Fixes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Approval field payload injection blocked: config writes can no longer smuggle credential fields into tables&lt;/li&gt;
&lt;li&gt;MCP server listing now requires Admin role (was exposing tokens in SSE/HTTP URLs)&lt;/li&gt;
&lt;li&gt;API key revocation on &lt;code&gt;POST /api/config/reload&lt;/code&gt; now applies to REST surface (was only effective on WebSocket)&lt;/li&gt;
&lt;li&gt;Passkey login no longer accepts credentials filed under the wrong principal&lt;/li&gt;
&lt;li&gt;Dashboard root path protected by auth (was unprotected even with password configured)&lt;/li&gt;
&lt;li&gt;Dangerous-command gate no longer bypassed by quoted program names (&lt;code&gt;"rm" -rf /&lt;/code&gt; now blocked)&lt;/li&gt;
&lt;li&gt;Sidecar secrets no longer shared between sibling instances&lt;/li&gt;
&lt;li&gt;Plugin &lt;code&gt;[env]&lt;/code&gt; expansion can no longer reference reserved secrets&lt;/li&gt;
&lt;li&gt;Chat WebSocket now verifies caller owns the agent (not just exists)&lt;/li&gt;
&lt;li&gt;Rich HTML sanitization moved to structured parsing (no longer regex-based escaping that can be evaded)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sidecar schema probes run concurrently (cold-start boot time reduced 10–30x on deployments with many adapters)&lt;/li&gt;
&lt;li&gt;Per-adapter send backpressure prevents queuing under burst load&lt;/li&gt;
&lt;li&gt;Memory index rebuilt only on content changes, not on every access-count bump or decay sweep&lt;/li&gt;
&lt;li&gt;Reduced lock contention in concurrent retry scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Migration Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Operator-visible behavior change&lt;/strong&gt;: &lt;code&gt;max_network_bytes_per_hour&lt;/code&gt; now enforces the 100 MB default if unset. Agents moving more traffic need an explicit larger value or &lt;code&gt;0&lt;/code&gt; for unlimited.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow approval gates&lt;/strong&gt; now actually pause runs and wait for humans (previously ran unattended). Anything behind an approval gate will now require explicit approval to proceed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent session isolation&lt;/strong&gt;: agents running &lt;code&gt;session_mode = "new"&lt;/code&gt; no longer recall raw dialogue from earlier invocations; set &lt;code&gt;session_scoped_recall = false&lt;/code&gt; in &lt;code&gt;agent.toml&lt;/code&gt; to restore prior behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuration includes&lt;/strong&gt; with unknown fields are now rejected when &lt;code&gt;strict_config = true&lt;/code&gt; (was silently ignoring them).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.9.14" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.8.30 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Fri, 16 Oct 2026 05:38:04 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026830-released-3f9o</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026830-released-3f9o</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.8.30 Released
&lt;/h1&gt;

&lt;p&gt;554 PRs from 2 contributors have landed since v2026.8.19, bringing major improvements to agent memory, workflow composition, identity management, and operational reliability. Here's what you need to know.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agents Can Now Think for Themselves
&lt;/h3&gt;

&lt;p&gt;For the first time, agents can search, add, forget, and consolidate their own semantic memory without going through the REST API. Four new tools—&lt;code&gt;memory_semantic_search&lt;/code&gt;, &lt;code&gt;memory_semantic_add&lt;/code&gt;, &lt;code&gt;memory_semantic_forget&lt;/code&gt;, and &lt;code&gt;memory_semantic_stats&lt;/code&gt;—give agents direct access to what they've learned. This is the unlock for self-correcting memory: if a stale "service X is down" entry keeps being recalled, the agent can now find it, fix it, or merge near-duplicates reinforcing bad beliefs. Recall is also now split between extracted facts and raw dialogue, so memory works as a two-class system that allocates budget fairly instead of letting one class starve the other.&lt;/p&gt;

&lt;p&gt;Session-scoped memory isolation is now configurable per agent, and per-capability access controls let you decide which agents can read vs. write their own stores—essential for shared or public agents where one visitor's context must stay separate from the next.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflows Are Now Composable, Portable, and Inspectable
&lt;/h3&gt;

&lt;p&gt;Agents can define workflows mid-conversation with the new &lt;code&gt;workflow_create&lt;/code&gt; tool. Workflows now support named agent bindings—pick a specific running instance, an agent name resolved at step time, or an agent type spawned from a template—so the same workflow runs on any LibreFang instance without pre-registration. The Canvas editor makes this visible and editable, with per-step session mode and required-skills validation before dispatch.&lt;/p&gt;

&lt;p&gt;Workflow runs now record their owner (a user or group), and every step's cost rolls up to the agent that asked for it, so spend attribution stays honest even when workflows fan out across shared agent types.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents Can Spawn Ephemeral Workers
&lt;/h3&gt;

&lt;p&gt;Most delegation is task-shaped, not colleague-shaped: hand work to a fresh context for one turn, get an answer back, and clean up. &lt;code&gt;agent_spawn&lt;/code&gt; with &lt;code&gt;ephemeral: true&lt;/code&gt; now does this without creating agent records, sessions, or workspaces. Workers inherit the spawning agent's tool set and spend cap, and nesting is bounded by the same recursion limit multi-step workflows use. &lt;code&gt;POST /api/agents/spawn-ephemeral&lt;/code&gt; and the Quick Run button on the Agent Types page let you test this without writing an agent.&lt;/p&gt;

&lt;p&gt;Worker runs leave a record with their task, answer, model, tokens, cost, and outcome—readable at &lt;code&gt;GET /api/agents/{id}/ephemeral-runs&lt;/code&gt; so you can inspect what agents delegated and what it cost them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Identity and Access Control Are Now Group-Aware
&lt;/h3&gt;

&lt;p&gt;Groups are now a first-class entity. Define a team in &lt;code&gt;config.toml&lt;/code&gt; with &lt;code&gt;[[groups]]&lt;/code&gt;, assign roles to every member, and use that group as the owner of workflows, cron jobs, or access policies. Identity-provider groups can now map onto local groups via &lt;code&gt;[external_auth.group_map]&lt;/code&gt;, so removing someone from your Okta team or Keycloak group instantly revokes their LibreFang access. OIDC role claims can authorize API access through &lt;code&gt;[external_auth.role_map]&lt;/code&gt;, completing the SSO picture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Slack Channels Got Smarter
&lt;/h3&gt;

&lt;p&gt;Agents can now see who's in a channel with the &lt;code&gt;channel_members&lt;/code&gt; tool, answer one person privately with &lt;code&gt;channel_dm&lt;/code&gt;, and receive images and files that visitors upload. Display names are resolved through the Slack API with configurable caching, so your agent names people by handle instead of by ID. All of this is behind configurable flags—bulk enumeration, display-name resolution, and file forwarding—so you control the tradeoff between capability and data persistence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backups Are Selective and Restorable
&lt;/h3&gt;

&lt;p&gt;Restore a backup onto a running machine instead of only onto a blank slate, keep your current config while adopting everything else, and choose which components to restore—agents, cron jobs, memory, data directory. The TUI's new Backups tab lets you do this over SSH without hand-writing HTTP requests. Archive manifests carry component metadata, so the client always matches what it sends against what the archive actually contains.&lt;/p&gt;

&lt;p&gt;Audit hash chains that have broken can now be repaired without destroying the evidence: &lt;code&gt;librefang security audit-reanchor&lt;/code&gt; archives the broken rows to a tamper-evident JSON file before re-anchoring the chain, so compliance stays intact.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kubernetes and Mounted Configuration Just Work
&lt;/h3&gt;

&lt;p&gt;Managed configuration mode now reaches every surface. The daemon resolves &lt;code&gt;config.toml&lt;/code&gt; exactly once at boot and every interface reads that one path, so a Kubernetes ConfigMap or Docker bind mount is no longer a footgun. Pod rollouts are confirmed by comparing checksums—the same value the API reports back—instead of inferring from restart counts. A Kubernetes overlay at &lt;code&gt;deploy/kubernetes/overlays/managed-config/&lt;/code&gt; shows the exact shape this was built for.&lt;/p&gt;

&lt;p&gt;Provisioned agent directories let you declare agents in a tree the deployment owns, and the daemon prevents rewrites while keeping agent operations (suspend, resume, messages) fully available. Removal of a declaration releases the agent back to runtime ownership, so moving between managed and manual is reversible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the Hood
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Performance and Reliability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Memory extraction no longer runs on turns that don't need it, and the extraction model is now visible and configurable instead of silently inherited.&lt;/li&gt;
&lt;li&gt;Confidence decay now charges exactly once per interval instead of accumulating quadratically, so memory doesn't mysteriously evaporate after a week of disuse.&lt;/li&gt;
&lt;li&gt;Recalled memory bullets are cut at sentence boundaries instead of mid-word, preserving readability and preventing the model from inventing missing text.&lt;/li&gt;
&lt;li&gt;Context windows for self-hosted gateways are now discovered and editable, so conservative fallback assumptions don't evict your actual content.&lt;/li&gt;
&lt;li&gt;The agent loop's memory section now splits budget between facts and dialogue fairly, and every clipped bullet is marked so you see what was omitted.&lt;/li&gt;
&lt;li&gt;Model overrides are editable from the dashboard and survive registry syncs, so one operator correction applies to every agent on that model.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Developer Experience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The CLI now accepts &lt;code&gt;--session-id&lt;/code&gt; on &lt;code&gt;librefang message&lt;/code&gt;, so scripted callers can address one conversation among many that a single agent serves.&lt;/li&gt;
&lt;li&gt;Workflow templates now appear in &lt;code&gt;librefang workflow run&lt;/code&gt; output, and the TUI's workflow creator names all three agent binding modes it accepts.&lt;/li&gt;
&lt;li&gt;Agent-created skills now record the agent that made them instead of a placeholder, so the provenance is visible in the registry.&lt;/li&gt;
&lt;li&gt;The dashboard, REST API, and TUI all surface pending skills and MCP servers—declarations nothing has installed yet—so gaps in a workflow are visible before it runs.&lt;/li&gt;
&lt;li&gt;Usage and budget endpoints now accept date ranges and export to CSV, so monthly reporting doesn't require a client-side workaround.&lt;/li&gt;
&lt;li&gt;Error messages now name the budget cap that was hit and what it's set to, instead of generic "raise a limit" guidance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security and Hardening
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Audio extracted from video is now bounded by both its container size and its own decoded size, preventing a large container from holding much more audio than the cap allows.&lt;/li&gt;
&lt;li&gt;Backup restore entry counts, decompression ratios, and extracted sizes are all bounded, and symlink escapes are rejected.&lt;/li&gt;
&lt;li&gt;Automatic memory respects session boundaries and per-capability access controls, so one visitor's context never leaks into the next.&lt;/li&gt;
&lt;li&gt;Agent manifests destined for a shared registry are automatically sanitized of instance-specific details—absolute paths, credential env vars, private URLs, free-text hostnames.&lt;/li&gt;
&lt;li&gt;The TUI templates screen no longer invents a capability declaration when spawning agents; operator-created types run with their actual declared permissions.&lt;/li&gt;
&lt;li&gt;Dashboard caller authentication is now moved off async workers and scrubbed from HTTP 500 responses while retained in server logs for diagnosis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fixes
&lt;/h3&gt;

&lt;p&gt;Over 200 fixes landed this release. Key themes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concurrency and state&lt;/strong&gt;: Fixed lock poisoning in audit chains, credential vaults, MCP reloads, and a dozen other stateful paths. Serialized session refreshes, token refreshes, and config writes so concurrent mutations don't race.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type safety&lt;/strong&gt;: Added missing schema updates, fixed API contracts that had drifted from reality, and corrected generated client code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gateway compatibility&lt;/strong&gt;: Models served through OpenAI-compatible proxies (vLLM, LM Studio, llama.cpp, LiteLLM) now discover context windows, handle reasoning-effort parameter mismatches, and accept cached discovery across restarts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows platform&lt;/strong&gt;: Fixed path separators in template checks, database reservations, and archive restoration so CI and deployments work identically on every OS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Channel adapters&lt;/strong&gt;: Slack, Telegram, Discord, WhatsApp, WeChat, Bluesky, Mastodon, Reddit, and a dozen others all got hardening against transient failures, malformed states, and protocol edge cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;: Nearly 100 UI fixes—cache invalidation, focus management, state initialization, async task cleanup, and accessibility improvements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory correctness&lt;/strong&gt;: Stopped memories from forking under concurrent writes, fixed embedding dimensionality checks, and corrected the class-blind recall that was evicting facts in favor of raw dialogue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.8.30" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.10.16 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Fri, 16 Oct 2026 05:37:46 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-20261016-released-5ahm</link>
      <guid>https://dev.to/suzukazehaduki/librefang-20261016-released-5ahm</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.10.16 Released
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;LibreFang 2026.10.16&lt;/strong&gt; brings a unified agent editor, avatar support for agents and users, knowledge-base sharing, and significant stability improvements across the platform.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;144 PRs from 6 contributors since v2026.9.19.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Configuration &amp;amp; Identity
&lt;/h2&gt;

&lt;p&gt;We've consolidated how you configure and identify agents. Everything — model parameters, personality, avatar, tools, skills, channels, memory access, cost limits, and planning settings — now lives in one unified &lt;strong&gt;config tab&lt;/strong&gt; on the agent view. No more hunting across drawer, routing panel, and schedule tabs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent and user avatars&lt;/strong&gt; are here: upload images or use emoji to personalize your agents and teammates across the dashboard, session lists, and every chat message. The agent list now shows avatars too, making it easy to tell your agents apart at a glance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent manifest version history&lt;/strong&gt; records every configuration change with its source (dashboard edit, restore, raw TOML, …), so you can review what changed and when, restore any prior version with a diff preview, and see the history from the TUI or the dashboard without switching contexts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Knowledge Management &amp;amp; Chat
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Knowledge bases&lt;/strong&gt; let you upload documents once and grant access to specific agents. No more per-session file uploads — write &lt;code&gt;@knowledge-base/document.md&lt;/code&gt; in your prompt and any agent with access can read it. The UI surfaces knowledge-base sharing alongside every other agent capability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chat improvements&lt;/strong&gt;: Mermaid diagrams now render inline instead of showing raw syntax. Conversations with the same agent appear as tabs instead of hiding behind a dropdown. You can now &lt;strong&gt;select specific messages to export or print&lt;/strong&gt;, so you get a clean document of just what matters without the whole sidebar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model Control &amp;amp; Discovery
&lt;/h2&gt;

&lt;p&gt;Model parameters (&lt;code&gt;top_k&lt;/code&gt;, &lt;code&gt;min_p&lt;/code&gt;, &lt;code&gt;repeat_penalty&lt;/code&gt;) now have dedicated UI controls in the dashboard and TUI instead of living in untyped &lt;code&gt;extra_params&lt;/code&gt;. The &lt;strong&gt;searchable model picker&lt;/strong&gt; replaces free-text model entry — no more memorizing model IDs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live model discovery&lt;/strong&gt; preferences are preserved across restarts, and providers can now map credentials to request headers for authenticated remote MCP servers. Discovery still fails gracefully when endpoints are slow, and gateways report pricing and capacity through their optional &lt;code&gt;/model/info&lt;/code&gt; extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  Terminal &amp;amp; Automation
&lt;/h2&gt;

&lt;p&gt;The TUI got major upgrades: &lt;strong&gt;shared-folders editor&lt;/strong&gt; lets you declare workspaces without opening the manifest in another window. &lt;strong&gt;Goals screen&lt;/strong&gt; now surfaces loop engineering, per-goal cadence, and verification settings. &lt;strong&gt;Workflow runs&lt;/strong&gt; display live step progress (&lt;code&gt;▰▰▱▱▱ 2/5&lt;/code&gt;). &lt;strong&gt;Agent configuration history&lt;/strong&gt; renders in the terminal, so terminal-only operators can audit changes without opening a browser.&lt;/p&gt;

&lt;p&gt;The TUI also &lt;strong&gt;reports daemon errors&lt;/strong&gt; instead of showing empty lists or spinners that never stop — fetch errors now surface with the daemon's reason and status.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tasks &amp;amp; Approvals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Task priority and per-task timeouts&lt;/strong&gt; are now exposed in the UI (the New Task dialog gained both fields). Tasks assigned to non-existent agents are now rejected upfront instead of queueing forever.&lt;/p&gt;

&lt;p&gt;Approval notifications now route correctly through sidecars, and authenticated dashboard users now respect your configured memory access policy instead of failing open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stability &amp;amp; Security
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sampling parameters&lt;/strong&gt; (&lt;code&gt;top_p&lt;/code&gt;, &lt;code&gt;frequency_penalty&lt;/code&gt;, &lt;code&gt;presence_penalty&lt;/code&gt;) now reach the wire correctly for every provider that uses them — Anthropic, Gemini, Ollama, OpenAI-format drivers, and custom endpoints all get the right fields without fallbacks.&lt;/p&gt;

&lt;p&gt;Ephemeral worker runs now report when they hit the iteration cap, and when they do, you get what they accumulated before stopping instead of silence. History compaction runs on every turn type now, not just streaming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSH transport security&lt;/strong&gt;: upgraded russh, closing four SSH advisories. &lt;strong&gt;Filename guard&lt;/strong&gt; validates all incoming names against Windows-hostile characters and path exploits, refusing rather than sanitizing. &lt;strong&gt;Cron scripts&lt;/strong&gt; must resolve under the scripts directory now, closing a path traversal. Integration installs no longer write untrusted keys into the vault.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;||spoiler||&lt;/code&gt; and &lt;code&gt;==highlight==&lt;/code&gt; syntax works again in Telegram messages (these had silently vanished on the blocks-based path). Voice messages to users who forbid them fall back to audio documents. Windows concurrent writes to identity files no longer fail spuriously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Behind the Scenes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Mermaid dependency vulnerabilities (CVE-2026-4800, CVE-2026-2950) resolved by overriding lodash-es on the four packages that carry it.&lt;/li&gt;
&lt;li&gt;LiteLLM gateways now fold &lt;code&gt;/model/info&lt;/code&gt; into their discovery results when the listing leaves capacity unknown.&lt;/li&gt;
&lt;li&gt;Model routing clearly indicates when Stable mode makes it inert — both in the API response and in the UI.&lt;/li&gt;
&lt;li&gt;Personality edits now survive a provider swap (vibe, archetype, greeting_style used to disappear).&lt;/li&gt;
&lt;li&gt;Agent workspace collisions during spawn are detected and refused — you can no longer accidentally give an agent another agent's directory.&lt;/li&gt;
&lt;li&gt;A renamed or cloned agent no longer introduces itself by its old name.&lt;/li&gt;
&lt;li&gt;Kubernetes deployments now have a &lt;strong&gt;community Helm chart&lt;/strong&gt; mirroring the Kustomize manifests, with proper &lt;code&gt;restricted&lt;/code&gt; Pod Security and single-replica StatefulSet enforcement.&lt;/li&gt;
&lt;li&gt;Config hot-reload is smarter: a field you omit from the reload document now keeps its live value instead of resetting to the compiled default. Explicitly state &lt;code&gt;key = []&lt;/code&gt; to clear a list.&lt;/li&gt;
&lt;li&gt;Binary versioning now tracks the actual commit it was built from, even in worktrees and after branch rewrites.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Developer Experience
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CLI skill publishing now reaches GitHub Enterprise Server via &lt;code&gt;skills.promotion.api_base_url&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The Rust and Telegram sidecars now commit &lt;code&gt;Cargo.lock&lt;/code&gt; and MSRV is measured rather than declared (SDK 1.71, Telegram 1.88).&lt;/li&gt;
&lt;li&gt;Generated SDKs now correctly type response bodies for all endpoints (was untyped blob for registry-diff and restore).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;librefang skill publish --dry-run&lt;/code&gt; prints the configured repository.&lt;/li&gt;
&lt;li&gt;macOS binaries are now Developer ID signed, preserving Full Disk Access and Automation grants across updates.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.10.16" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.8.19 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Tue, 18 Aug 2026 23:03:56 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026819-released-1c8g</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026819-released-1c8g</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.8.19 Released
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;474 PRs from 5 contributors since v2026.7.31.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This release is a massive stability and security push. We've closed dozens of data-loss vectors, locked down SSRF, hardened atomic file writes throughout the daemon, and fixed a ton of edge cases that were silently failing or corrupting state. On the feature side: managed configuration mode for self-hosted deployments, long-form audio transcription that doesn't drop your 20-minute recordings, and Polish language support. Performance-wise we've moved a bunch of blocking I/O off async workers and bolted on some overdue mutex poison recovery so a single panic doesn't disable half the daemon.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security &amp;amp; Reliability
&lt;/h3&gt;

&lt;p&gt;This release closes a lot of holes. We've sealed path-traversal in skill/channel IDs, fixed SSRF vectors in link context and webhook callbacks, escaped untrusted data in OAuth responses, and re-locked the auth scoping so non-owners can't probe other agents' sessions. On the data side: we now fsync parent directories after atomic file writes, serialize concurrent writes to shared files (e.g. secrets.env), and validate every SQLite row decode so corruption surfaces instead of silently dropping data. Credentials get redacted consistently before export, and the desktop app no longer bypasses shell security when uninstalling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most impactful:&lt;/strong&gt; we've recovered poison recovery for ~40 locks throughout the daemon. A single panic in a critical section used to permanently disable feature areas (metering, routing, audit, skills, memory) for the entire process lifetime. Now they recover and log what went wrong, so one bad turn doesn't ghost you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managed Configuration
&lt;/h3&gt;

&lt;p&gt;New &lt;code&gt;LIBREFANG_CONFIG_MODE=managed&lt;/code&gt; lets you own &lt;code&gt;config.toml&lt;/code&gt; instead of the daemon. Set it in your environment, and every API route that would mutate config answers &lt;code&gt;423 Locked&lt;/code&gt;. Works great with Kubernetes ConfigMaps or read-only mounts. The API now also reports the config's SHA-256, write status, and last-modified time so your dashboard can render it read-only server-side. Plus custom providers can opt into live model discovery if you're running self-hosted Ollama or vLLM and want the model list to refresh automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Long-Form Audio &amp;amp; Video
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;media_transcribe&lt;/code&gt; can now process recordings in windowed chunks and write to a file. Your 30-minute recording won't drop anymore — it was hitting the spill threshold and the tool-result size cap together. Windows also get deduplicated on their Ogg granule position so you don't lose audio at boundaries. Transcription of &lt;code&gt;.mp4&lt;/code&gt; and &lt;code&gt;.mov&lt;/code&gt; now works (they need seeking, so we stage to disk first).&lt;/p&gt;

&lt;h3&gt;
  
  
  Async Agent Messaging &amp;amp; Task Waking
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;agent_send&lt;/code&gt; is now non-blocking by default — returns a task ID you can poll. Previous default made you predict whether a delegation would be slow and opt in to &lt;code&gt;async: true&lt;/code&gt;, which was a coin flip. &lt;code&gt;false&lt;/code&gt; only when you need the answer in-turn.&lt;/p&gt;

&lt;p&gt;Tasks assigned to agents now wake them automatically, no manual trigger required. If nobody's listening to &lt;code&gt;task_posted&lt;/code&gt; events, the task still reaches its owner via a synthesized wake. Dead triggers can no longer shadow real work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Localization Fixes
&lt;/h3&gt;

&lt;p&gt;Polish (&lt;code&gt;pl&lt;/code&gt;) is now a first-class supported language. We also restored missing diacritics in Spanish and French (&lt;code&gt;válido&lt;/code&gt;, &lt;code&gt;déjà&lt;/code&gt;, &lt;code&gt;¿agente no encontrado?&lt;/code&gt;, etc.) and added missing Japanese error keys.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;p&gt;A lot of blocking filesystem and database work has moved off Tokio's async workers. Config reads/writes, SQLite queries, WASM module loads, and PDF extraction now run on the blocking pool so they don't park your request handler. Desktop app SPA installs, agent-template discovery, and Chromium binary probing also got offloaded. We also offloaded the image vulnerability scanner (Trivy) to run on every build — no user-facing gate yet (waiting on remediation), but full JSON/SARIF artifacts are retained for CI review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Link extraction&lt;/strong&gt; wasn't recursing into list items, and the page-selector was picking the first &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; instead of the container holding multiple articles. Fixed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows tests&lt;/strong&gt; got disabled by a desktop app linking failure. Re-enabled with a workaround, keeping the compile+link coverage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack messages&lt;/strong&gt; with lots of whitespace rendered as walls of blanks; fixed. Also fixed sections overshooting the 3000-character limit and getting dropped entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trigger cooldown&lt;/strong&gt; was per-trigger instead of per-subject, so a second distinct thing happening fast got discarded. Now scoped correctly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image generation&lt;/strong&gt; against OpenAI's &lt;code&gt;gpt-image-*&lt;/code&gt; models failed on &lt;code&gt;response_format&lt;/code&gt; rejection. Removed it for that family.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;browser_read_page&lt;/code&gt;&lt;/strong&gt; now deduplicates links and renders them as &lt;code&gt;⟨n⟩&lt;/code&gt; markers + a separate table, cutting link payload 70–84% on dense pages and keeping markers clickable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Grab the &lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.8.19" rel="noopener noreferrer"&gt;full list&lt;/a&gt; if you want the gory details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.8.19" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.7.31 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Fri, 31 Jul 2026 04:01:17 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026731-released-143j</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026731-released-143j</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.7.31 Released
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;58 PRs from 4 contributors since v2026.7.27.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LibreFang 2026.7.31 ships production-ready multi-account support, Kubernetes deployment, EveryAPI auto-detection, and a security hardening pass that closes 20+ authorization and credential-handling gaps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core improvements
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;API security gets teeth:&lt;/strong&gt; Master API keys now support hashing (SHA-256 or Argon2id), environment variable indirection, and vault storage — so you can rotate the secret without touching &lt;code&gt;config.toml&lt;/code&gt;. The hash-only mode closes a WebSocket/terminal auth bypass that would have re-opened a bare-key exposure path. Per-user provider credentials (added in the last release) now correctly bill and budget the user whose key is being spent, and the authorization system gained 20 fixes to ownership checks, RBAC gates, and cross-account attack surfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EveryAPI integration is automatic:&lt;/strong&gt; The daemon now auto-detects the EveryAPI CLI if you're logged in, sources model metadata from the gateway itself (not a stale OpenRouter snapshot), and refreshes the catalog on a configurable TTL. A new dashboard connect action means you never need a terminal to add the gateway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browser automation just got richer:&lt;/strong&gt; Agents can now attach to browser-level Chrome DevTools Protocol endpoints via &lt;code&gt;Target.createTarget&lt;/code&gt;, enabling session-wide automation instead of page-specific. Page extraction is now configurable (max characters, reported in the truncation marker), and video containers (MP4, MOV, MKV, AVI) are accepted for transcription with automatic audio extraction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hands stay customized across daemon restarts:&lt;/strong&gt; Edits to built-in hands now persist to an operator override directory instead of getting erased by the next registry sync. The hand's live configuration also reaches agents immediately on save from the dashboard, not just on restart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-account messaging works correctly:&lt;/strong&gt; Channel status indicators now reflect supervisor liveness, per-channel settings reach the right bot account, and deferred approvals route through the account-qualified delivery path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes is supported out of the box:&lt;/strong&gt; A single-replica baseline with readiness contract, restricted Pod Security, and rootless support is shipped under &lt;code&gt;deploy/kubernetes/&lt;/code&gt;. The daemon gains &lt;code&gt;LIBREFANG_API_KEY&lt;/code&gt; env override and &lt;code&gt;--system&lt;/code&gt; macOS LaunchDaemon support for always-on installs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Added features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;EveryAPI gateway auto-detection and dashboard connect:&lt;/strong&gt; Read credentials from &lt;code&gt;~/.config/everyapi/credentials.json&lt;/code&gt; on demand, fetch live model list from the gateway's &lt;code&gt;/api/pricing&lt;/code&gt;, refresh on a configurable TTL, auto-detect CLI login, and surface a connect action on the dashboard (no terminal required).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Per-user LLM provider credentials:&lt;/strong&gt; Users can now store their own upstream provider API keys (encrypted in the vault), bill their own spend against their own budget, and the cost is attributed correctly per-user across all spend paths (REST, streaming, ephemeral).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hand customization on disk:&lt;/strong&gt; Edits to registry-shipped hands now persist to &lt;code&gt;~/.librefang/hands/&lt;/code&gt; instead of getting erased on sync. Hand settings changes reach live agents immediately; manifest edits are applied on the next activation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Browser-level Chrome DevTools Protocol:&lt;/strong&gt; Agents can attach to browser-level CDP endpoints by creating a target first, enabling session-wide automation. Page extraction is now operator-configurable (&lt;code&gt;[browser] max_content_chars&lt;/code&gt;) and reports the pre-truncation length so the model knows what it's missing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Video container support for transcription:&lt;/strong&gt; &lt;code&gt;media_transcribe&lt;/code&gt; and &lt;code&gt;speech_to_text&lt;/code&gt; now accept MP4, MOV, MKV, AVI containers with automatic audio extraction and Ogg/Opus re-encode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;STT language and prompt parameters:&lt;/strong&gt; &lt;code&gt;language&lt;/code&gt; and &lt;code&gt;prompt&lt;/code&gt; parameters now reach Whisper-compatible providers (Groq, OpenAI, MiniMax, Fireworks, Together, SiliconFlow) instead of being silently dropped.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP resources primitive:&lt;/strong&gt; The client now implements &lt;code&gt;resources/list&lt;/code&gt;, &lt;code&gt;resources/read&lt;/code&gt;, and &lt;code&gt;resources/templates/list&lt;/code&gt;, surfacing server resources as synthetic tools and inlining resource content into prompts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kubernetes-ready deployment:&lt;/strong&gt; Single-replica manifests under &lt;code&gt;deploy/kubernetes/&lt;/code&gt; with restricted Pod Security, readiness probes on &lt;code&gt;/api/ready&lt;/code&gt; (separate from liveness), and rootless support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS system LaunchDaemon:&lt;/strong&gt; &lt;code&gt;service install --system&lt;/code&gt; now registers a boot-time LaunchDaemon (instead of login-time LaunchAgent), so the daemon starts even when the user hasn't logged in yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Per-channel sidecar settings:&lt;/strong&gt; &lt;code&gt;dm_policy&lt;/code&gt;, &lt;code&gt;group_policy&lt;/code&gt;, &lt;code&gt;threading&lt;/code&gt;, and &lt;code&gt;output_format&lt;/code&gt; overrides per &lt;code&gt;[[sidecar_channels]]&lt;/code&gt;, restoring fine-grained control lost in the sidecar migration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Config schema in &lt;code&gt;GET /api/config&lt;/code&gt;:&lt;/strong&gt; The response now includes every writable field plus a &lt;code&gt;x-non-writable&lt;/code&gt; list so the dashboard can render read-only fields with hints to edit &lt;code&gt;config.toml&lt;/code&gt; instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explicit hand scheduling:&lt;/strong&gt; Hands now require an explicit &lt;code&gt;[autonomous]&lt;/code&gt; block or &lt;code&gt;schedule&lt;/code&gt; to tick — no more silent background loops inferred from &lt;code&gt;max_iterations&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Registry sync toggle:&lt;/strong&gt; Set &lt;code&gt;[registry] auto_sync = false&lt;/code&gt; to freeze the checkout and prevent edits from being erased on daemon restart.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Skill changelog fragments:&lt;/strong&gt; Write one &lt;code&gt;.md&lt;/code&gt; file per changelog entry under &lt;code&gt;changelog.d/{added,fixed,changed}/&lt;/code&gt; to avoid merge conflicts — fragments are auto-collected into &lt;code&gt;## [Unreleased]&lt;/code&gt; on release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Process completion notifications:&lt;/strong&gt; &lt;code&gt;process_start&lt;/code&gt; with &lt;code&gt;notify_on_completion: true&lt;/code&gt; triggers a &lt;code&gt;TaskCompletionEvent&lt;/code&gt; when the process exits, reusing the async-task delivery path (no polling needed).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;All 25 channel type adapters in scheduler:&lt;/strong&gt; The scheduler delivery-target dropdown now lists WeChat, WeCom, Feishu, DingTalk, Teams, Google Chat, Matrix, Mattermost, WhatsApp, QQ, LINE, and the rest by name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP OAuth via dashboard:&lt;/strong&gt; MCP servers can now be configured with OAuth credentials through the dashboard, and the MCP bridge carries sender account context for proper access control.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NixOS first-class support:&lt;/strong&gt; Flake gains &lt;code&gt;nixosModules.default&lt;/code&gt; with &lt;code&gt;services.librefang&lt;/code&gt; configuration, &lt;code&gt;overlays.default&lt;/code&gt;, and evaluation-time assertions (e.g., no &lt;code&gt;environmentFile&lt;/code&gt; inside &lt;code&gt;/nix/store&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distributed debug symbols:&lt;/strong&gt; Release binaries ship with stripped executables and separate &lt;code&gt;.dSYM&lt;/code&gt; / &lt;code&gt;.dwp&lt;/code&gt; debug symbols, so crash reports can be symbolized without including symbols in the download.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Fixed bugs &amp;amp; security issues
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Authorization &amp;amp; access control (20+ fixes):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Owner-gate &lt;code&gt;GET /api/config/export&lt;/code&gt; (previously exposed plaintext master key to any Admin).&lt;/li&gt;
&lt;li&gt;Authorize channel slash-commands (&lt;code&gt;/approve&lt;/code&gt;, &lt;code&gt;/switch-agent&lt;/code&gt;, etc.) through RBAC before dispatch.&lt;/li&gt;
&lt;li&gt;Role-gate terminal and agent WebSocket upgrades (Admin+ for PTY, User+ for turns).&lt;/li&gt;
&lt;li&gt;Enforce ownership on &lt;code&gt;process_poll&lt;/code&gt; / &lt;code&gt;process_write&lt;/code&gt; / &lt;code&gt;process_kill&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Gate MCP-server config mutations to Owner (RCE risk via plugin lifecycle scripts).&lt;/li&gt;
&lt;li&gt;Scrub daemon environment before &lt;code&gt;process_start&lt;/code&gt; spawns (was exposing &lt;code&gt;LIBREFANG_VAULT_KEY&lt;/code&gt; and provider keys).&lt;/li&gt;
&lt;li&gt;Stop persistent plugins from inheriting full daemon environment.&lt;/li&gt;
&lt;li&gt;Bind &lt;code&gt;POST /api/auth/refresh&lt;/code&gt; to the session it can prove it owns (was leaking other users' upstream tokens to Admin callers).&lt;/li&gt;
&lt;li&gt;Apply dangerous-command blocklist to &lt;code&gt;process_start&lt;/code&gt; (was bypassing &lt;code&gt;shell_exec&lt;/code&gt; allowlist checks).&lt;/li&gt;
&lt;li&gt;Enforce &lt;code&gt;webhook_triggers.max_payload_bytes&lt;/code&gt; at the wire level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Multi-user data isolation (6+ fixes):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scope knowledge graph (entities/relations) per user, mirroring the memory scoping from the prior release.&lt;/li&gt;
&lt;li&gt;Stop compacted-session summaries from leaking across users on multi-user agents.&lt;/li&gt;
&lt;li&gt;Correctly attribute per-user provider-key spend to the user and enforce their budget.&lt;/li&gt;
&lt;li&gt;Scoped &lt;code&gt;GET /api/memory/agents/{id}/relations&lt;/code&gt; to the path's agent.&lt;/li&gt;
&lt;li&gt;Prevent cross-account &lt;code&gt;channel_send&lt;/code&gt; tool calls.&lt;/li&gt;
&lt;li&gt;Key channel message deduplication on per-user sender ID.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Credential &amp;amp; secret handling (8+ fixes):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accept &lt;code&gt;api_key_hash&lt;/code&gt; (&lt;code&gt;$sha256$...&lt;/code&gt;) in place of plaintext master key.&lt;/li&gt;
&lt;li&gt;Route master API key through env/vault indirection without re-reading &lt;code&gt;config.toml&lt;/code&gt; on reload.&lt;/li&gt;
&lt;li&gt;Hash-only credentials now work for WebSocket, terminal, and HTTP (previously were a bypass).&lt;/li&gt;
&lt;li&gt;Stop EveryAPI gateway base URL from being repointed to whatever account the CLI is logged into.&lt;/li&gt;
&lt;li&gt;Canonicalize provider name before per-user key lookup (so aliases bill the user's key, not fallback).&lt;/li&gt;
&lt;li&gt;Stop &lt;code&gt;GET /api/mcp/servers&lt;/code&gt; from serializing MCP environment values (was exposing inline credentials).&lt;/li&gt;
&lt;li&gt;Reject cross-account &lt;code&gt;channel_send&lt;/code&gt; on the &lt;code&gt;/mcp&lt;/code&gt; bridge path.&lt;/li&gt;
&lt;li&gt;Extended thinking now emitted through OpenAI-compatible driver (was parsed on receive only).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Streaming &amp;amp; error handling:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Surface mid-stream LLM errors (overload, rate-limit) instead of silently truncating to an empty "success" turn.&lt;/li&gt;
&lt;li&gt;Apply content-emitted guard at both streaming layers so a provider error doesn't concatenate partial responses.&lt;/li&gt;
&lt;li&gt;Classify &lt;code&gt;insufficient_quota&lt;/code&gt; as a billing error (not a malformed request) and apply long retry backoff.&lt;/li&gt;
&lt;li&gt;Terminal frames are now correlated with their chat turns (late frames no longer overwrite newer answers).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Configuration &amp;amp; state:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Config-reload now correctly gates &lt;code&gt;[registry] auto_sync&lt;/code&gt; to live-read (was falsely reporting restart-required).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;api_key_hash&lt;/code&gt; regenerates upgrade hints and warns if no transmittable key exists.&lt;/li&gt;
&lt;li&gt;Distinguish &lt;code&gt;json.null&lt;/code&gt; from unset fields in the &lt;code&gt;http_compat&lt;/code&gt; server round-trip (was corrupting redacted header values).&lt;/li&gt;
&lt;li&gt;Reject unknown keys in &lt;code&gt;[mcp_servers.transport]&lt;/code&gt; and both &lt;code&gt;HttpCompat&lt;/code&gt; variants (was silently discarding typos).&lt;/li&gt;
&lt;li&gt;Compare canonicalized JSON values in config-reload diffs (was spuriously reporting changes on every reload for maps).&lt;/li&gt;
&lt;li&gt;Parse &lt;code&gt;frequency = "reactive"&lt;/code&gt; without error (was a validation error while having no effect anyway).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Session &amp;amp; message routing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serialize &lt;code&gt;session_id_override = canonical_entry&lt;/code&gt; on the same lock as no-override persistent dispatch (was losing history on concurrent writes).&lt;/li&gt;
&lt;li&gt;Resolve model context window provider-aware (OpenRouter agents now show real window, not 8192-token fallback).&lt;/li&gt;
&lt;li&gt;Clear persistent &lt;code&gt;compacted_summary_session_id&lt;/code&gt; on model switch so budget math uses the right window.&lt;/li&gt;
&lt;li&gt;Cron fires with &lt;code&gt;session_mode = "new"&lt;/code&gt; now isolate per fire (was sharing one &lt;code&gt;for_sender_scope&lt;/code&gt; session).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GoalRunner::start&lt;/code&gt; now atomic (was leaving orphaned, unstoppable loops on concurrent starts).&lt;/li&gt;
&lt;li&gt;Stop non-passive agents from being flagged unresponsive (the heartbeat monitor was using the wrong schedule check).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tools &amp;amp; skill execution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply &lt;code&gt;tool_allowlist&lt;/code&gt; when rendering MCP tools (was ignoring glob patterns like &lt;code&gt;mcp_notion__*&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Apply &lt;code&gt;tool_allowlist&lt;/code&gt; on MCP tool execution, not just display.&lt;/li&gt;
&lt;li&gt;Stop skill &lt;code&gt;description&lt;/code&gt; and tool names from bypassing the prompt-injection scanner.&lt;/li&gt;
&lt;li&gt;Stop the taint heuristic from false-positive-blocking numeric IDs (&lt;code&gt;note-12345-67890.pdf&lt;/code&gt;) and long runs of digits.&lt;/li&gt;
&lt;li&gt;Tool allowlist entries that cannot grant are now named in the response (not silent no-ops).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;read_artifact&lt;/code&gt; results are exempt from re-spill gates (was looping on artifact fetch for results larger than &lt;code&gt;spill_threshold_bytes&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data correctness:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Session detail endpoint now reports &lt;code&gt;cost_usd&lt;/code&gt;, &lt;code&gt;total_tokens&lt;/code&gt;, &lt;code&gt;duration_ms&lt;/code&gt;, and &lt;code&gt;label&lt;/code&gt; (was missing all four).&lt;/li&gt;
&lt;li&gt;Goal creation now normalizes blank &lt;code&gt;parent_id&lt;/code&gt; / &lt;code&gt;agent_id&lt;/code&gt; to "absent" and validates non-blank UUIDs up front.&lt;/li&gt;
&lt;li&gt;Stop agent deletion from silently orphaning shared knowledge entities (was breaking entity ownership model).&lt;/li&gt;
&lt;li&gt;Stop hand activation from fabricating &lt;code&gt;mode = "full"&lt;/code&gt; exec policy (was silently bypassing approval queues).&lt;/li&gt;
&lt;li&gt;Stop &lt;code&gt;agent kill&lt;/code&gt; from deleting audit trail rows (was breaking the WORM Merkle chain).&lt;/li&gt;
&lt;li&gt;Stop a partial &lt;code&gt;[channel_overrides]&lt;/code&gt; table from gating group messages (was materializing defaults for unset fields).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Network &amp;amp; storage:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stop symlinks in skill installers from copying external tree contents.&lt;/li&gt;
&lt;li&gt;Bound ClawHub/Skillhub skill-zip extraction (was vulnerable to decompression bombs).&lt;/li&gt;
&lt;li&gt;Stream attachment-URL fetches with running size cap instead of buffering (was OOMing on unbounded bodies).&lt;/li&gt;
&lt;li&gt;Per-IP WebSocket connection tracker guard-drop TOCTOU fixed (was deleting live connection entries).&lt;/li&gt;
&lt;li&gt;Tolerate empty-string error objects in OpenAI-compatible streaming (was aborting stream on benign &lt;code&gt;"error": ""&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CLI &amp;amp; integration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telegram menu button callbacks now work (was silently dropping on both Rust and Python sidecars).&lt;/li&gt;
&lt;li&gt;Matrix sidecar inbound no longer silently dropped under default &lt;code&gt;GroupPolicy::MentionOnly&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Correct the channel docs' claim about env var names and formats.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;librefang skill install ./dir&lt;/code&gt; now accepts &lt;code&gt;SKILL.md&lt;/code&gt;-only directories and Git URLs.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;librefang skill search&lt;/code&gt; and &lt;code&gt;install&lt;/code&gt; now point at the local synced registry (was pointing at nonexistent GitHub org).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;librefang doctor&lt;/code&gt; EveryAPI check now warns on stale credentials (was reporting green after logout).&lt;/li&gt;
&lt;li&gt;Dashboard Clone button now opens a dialog (was posting empty body and always failing).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Changed
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bump &lt;code&gt;agent-client-protocol&lt;/code&gt; to 2.0.0 and update call sites.&lt;/li&gt;
&lt;li&gt;Normalize on-disk upload naming to &lt;code&gt;&amp;lt;uuid&amp;gt;.&amp;lt;ext&amp;gt;&lt;/code&gt; across all producers.&lt;/li&gt;
&lt;li&gt;Thread user identity into audit trail for human-initiated API actions.&lt;/li&gt;
&lt;li&gt;Migrate Linux system tray from &lt;code&gt;tray-icon&lt;/code&gt; to pure D-Bus &lt;code&gt;ksni&lt;/code&gt; implementation.&lt;/li&gt;
&lt;li&gt;Docker entrypoint now detects root vs. rootless mode and adapts (works in Kubernetes without a second image tag).&lt;/li&gt;
&lt;li&gt;Consolidate invisible/format code-point lists into a single source of truth.&lt;/li&gt;
&lt;li&gt;Stop releasing stable CLI to homebrew-tap (now ships from homebrew-core; tap carries &lt;code&gt;beta&lt;/code&gt; / &lt;code&gt;rc&lt;/code&gt; / versioned formulas only).&lt;/li&gt;
&lt;li&gt;Refresh OpenRouter model snapshot.&lt;/li&gt;
&lt;li&gt;Move all CI/release workflows from Node 20 to Node 24.&lt;/li&gt;
&lt;li&gt;Split release debug symbols into a separate asset (&lt;code&gt;.dSYM&lt;/code&gt; / &lt;code&gt;.dwp&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;p&gt;This release closes 30+ authorization, credential-handling, and data-isolation gaps discovered in the prior release's multi-user and per-user credential work. Key hardening:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Owner-gated MCP-server mutations, plugin installation, and &lt;code&gt;/api/config/export&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;RBAC now gates terminal and WebSocket upgrades by role (Admin+ for PTY, User+ for turns).&lt;/li&gt;
&lt;li&gt;Per-user budget enforcement on provider-key spend; spend is correctly attributed and audited.&lt;/li&gt;
&lt;li&gt;Hash-only API key now works for WebSocket/terminal (closes a previous bypass).&lt;/li&gt;
&lt;li&gt;Credential environment values no longer leak from &lt;code&gt;GET /api/mcp/servers&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Canonical provider names used in per-user key vault lookups (aliases now bill user keys correctly).&lt;/li&gt;
&lt;li&gt;Dangerous-command blocklist now applied to &lt;code&gt;process_start&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Daemon environment scrubbed before spawning persistent processes.&lt;/li&gt;
&lt;li&gt;Cross-account &lt;code&gt;channel_send&lt;/code&gt; blocked on both HTTP and &lt;code&gt;/mcp&lt;/code&gt; bridge paths.&lt;/li&gt;
&lt;li&gt;Knowledge graph scoped per user on multi-user agents.&lt;/li&gt;
&lt;li&gt;Compacted-session summaries no longer leak across users.&lt;/li&gt;
&lt;li&gt;Unknown keys in MCP config rejected at boot (was silently dropping typos).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.7.31" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.7.27 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Tue, 28 Jul 2026 06:33:53 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026727-released-3mc4</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026727-released-3mc4</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.7.27 Released
&lt;/h1&gt;

&lt;p&gt;We're shipping &lt;strong&gt;v2026.7.27&lt;/strong&gt; with 33 improvements spanning provider integrations, operational polish, and critical fidelity fixes.&lt;br&gt;
Here's what matters for your Agent OS deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  New: Provider Integrations &amp;amp; Deployment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;EveryAPI is now a first-class model provider.&lt;/strong&gt;&lt;br&gt;
Connect it via &lt;code&gt;librefang models connect everyapi&lt;/code&gt; in the CLI or the new Providers page UI.&lt;br&gt;
The CLI includes a built-in wiring doctor to catch misconfiguration—no more debugging silent auth failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;macOS users: LibreFang now runs at boot.&lt;/strong&gt;&lt;br&gt;
The new &lt;code&gt;service install --system&lt;/code&gt; command installs a LaunchDaemon so your daemon starts automatically at boot, before anyone logs in and without a user session.&lt;br&gt;
Forget about manual restarts after reboot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NixOS and additional Linux distros are now officially supported.&lt;/strong&gt;&lt;br&gt;
We've added first-class deployment support for NixOS with deepin and Debian distro awareness baked in, making it trivial to package and deploy across diverse Linux environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixes: Correctness &amp;amp; Data Integrity
&lt;/h2&gt;

&lt;p&gt;Three correctness fixes ship with this release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs are now WORM-protected.&lt;/strong&gt;
Audit entries persist even when an agent is purged, preventing accidental evidence loss in compliance-sensitive deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool results are no longer lossy.&lt;/strong&gt;
We fixed a spill dead band that was truncating tool outputs.
Results now round-trip without silent truncation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context windows from &lt;code&gt;agent.toml&lt;/code&gt; are now honored everywhere.&lt;/strong&gt;
Previously some turn-execution paths ignored the configured &lt;code&gt;context_window&lt;/code&gt;, leading to inconsistent behavior.
This is fixed across all paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Under the Hood
&lt;/h2&gt;

&lt;p&gt;Security dependency bumps clear high-severity advisories in libvips (via sharp &amp;gt;=0.35.0) and Next.js App Router.&lt;br&gt;
We've also hardened credential-pattern detection to reduce false positives, improved test reliability with connection pool timeouts, and fixed callback message ID resolution for MCP OAuth flows.&lt;/p&gt;

&lt;p&gt;The TUI now runs on a process-lifetime runtime, preventing startup panics and silent session-summary loss during shutdown.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;33 PRs from 2 contributors since v2026.7.21.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.7.27" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.7.21 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Mon, 27 Jul 2026 11:33:15 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026721-released-1g3h</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026721-released-1g3h</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.7.21 Released
&lt;/h1&gt;

&lt;p&gt;61 PRs from 4 contributors since v2026.7.11.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;p&gt;This release brings &lt;strong&gt;critical security improvements&lt;/strong&gt;, &lt;strong&gt;multi-user isolation fixes&lt;/strong&gt;, and &lt;strong&gt;powerful credential management&lt;/strong&gt; — all while expanding MCP integration and shipping quality-of-life wins across the dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 Security &amp;amp; Multi-User Data Isolation
&lt;/h3&gt;

&lt;p&gt;If you're running LibreFang with multiple users or on shared infrastructure, pay close attention here.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-user LLM provider credentials&lt;/strong&gt; — Users can now bring their own API keys with transparent per-owner spend tracking. Operators set org-wide provider allowlists and enforce per-user budgets directly at the API level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge graph per-user scoping&lt;/strong&gt; — Fixed a cross-user data leak: the knowledge graph is now partitioned by user on multi-user agents, ensuring shared agents don't expose one user's memory to another.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-account channel guards&lt;/strong&gt; — Enforced through the MCP bridge to prevent unauthorized agent-to-channel sends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session-owned compacted summaries&lt;/strong&gt; — Prevents prompt leaks across user sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Four-pass security audit&lt;/strong&gt; — Caught and fixed 15+ bugs ranging from authorization gaps to token-quota races.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Better Developer Experience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP resources primitive&lt;/strong&gt; — Agents can now access MCP-exposed resources, completing the MCP integration beyond tools alone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Slack progress for long tasks&lt;/strong&gt; — Long-running agent tasks now post real-time phase updates in Slack using Block Kit message edits, so users see progress instead of waiting for a single final reply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HAND.toml online editing&lt;/strong&gt; — Edit hand manifests directly from the Hands panel in the dashboard — no file editing required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expanded delivery-target channel presets&lt;/strong&gt; — All sidecar adapters now support shortcut presets for common targets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🛠️ Infrastructure &amp;amp; Provider Robustness
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-provider improvements&lt;/strong&gt; — Added response_format support for Gemini and Vertex AI; prefer live model catalog with build-time fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token quota safety&lt;/strong&gt; — Release reservations on drop to prevent self-imposed quota DoS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provider alias safety&lt;/strong&gt; — Canonicalize providers before per-user key lookup to block chargeback leaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better error visibility&lt;/strong&gt; — Surface mid-stream provider errors instead of garbled or empty turns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Added
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Env opt-out (TELEGRAM_STREAMING) for the streaming path (#6482) (@houko)&lt;/li&gt;
&lt;li&gt;Per-user LLM provider credentials with per-owner usage attribution (initial) (#6483) (@houko)&lt;/li&gt;
&lt;li&gt;Org-wide LLM provider allowlist (fail-closed at driver resolution) (#6484) (@houko)&lt;/li&gt;
&lt;li&gt;Slack multi-step progress display via AgentPhase-driven Block Kit updates (#6487) (@houko)&lt;/li&gt;
&lt;li&gt;Per-user attribution survey + API-level user filtering of audit queries (#6488) (@houko)&lt;/li&gt;
&lt;li&gt;Process_start completion notification via the async task tracker (#6489) (@houko)&lt;/li&gt;
&lt;li&gt;Edit HAND.toml online from the Hands panel (#6490) (@houko)&lt;/li&gt;
&lt;li&gt;Scope the knowledge graph per user (peer_id) on multi-user agents (#6494) (#6502) (@houko)&lt;/li&gt;
&lt;li&gt;Expand delivery-target channel presets to all sidecar adapters (#6506) (@houko)&lt;/li&gt;
&lt;li&gt;Owner-gated CRUD for per-user provider credentials (#6460) (#6509) (@houko)&lt;/li&gt;
&lt;li&gt;Implement the MCP resources primitive (#6501) (#6532) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fixed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prefer the live model catalog with a build fallback (#6384) (@pavver)&lt;/li&gt;
&lt;li&gt;Security and correctness hardening from repo-wide audit (#6438) (@houko)&lt;/li&gt;
&lt;li&gt;Second-pass security and correctness hardening from repo-wide audit (#6439) (@houko)&lt;/li&gt;
&lt;li&gt;Third-pass security and correctness hardening from repo-wide audit (#6441) (@houko)&lt;/li&gt;
&lt;li&gt;Fourth-pass security and correctness hardening from repo-wide audit (#6446) (@houko)&lt;/li&gt;
&lt;li&gt;Resolve four reported bugs (#6423, #6442, #6443, #6444) (#6449) (@houko)&lt;/li&gt;
&lt;li&gt;Enforce cross-account channel_send guard through the /mcp bridge (#6443) (#6455) (@houko)&lt;/li&gt;
&lt;li&gt;Trust operator env allowlist in sandbox_command (#6465) (@houko)&lt;/li&gt;
&lt;li&gt;Treat retired pnpm audit endpoint as skip, not a dependency issue (#6466) (@houko)&lt;/li&gt;
&lt;li&gt;Field-scope dm_policy/group_policy so a partial override stops silently gating groups, and expose them on [sidecar_channels] (#6468) (@houko)&lt;/li&gt;
&lt;li&gt;Distinguish context and budget limits (#6479) (@houko)&lt;/li&gt;
&lt;li&gt;Allow dashboard login script under CSP (#6480) (@houko)&lt;/li&gt;
&lt;li&gt;Treat auto_dream fork tool calls as system-internal so RBAC does not gate them (#6485) (@houko)&lt;/li&gt;
&lt;li&gt;Login page unreadable in light theme (CSS cascade source-order bug) (#6486) (@houko)&lt;/li&gt;
&lt;li&gt;Pin login_page.html to LF so the CSP-hash test passes on Windows (#6481) (#6496) (@houko)&lt;/li&gt;
&lt;li&gt;Gate compacted summary by owning session to stop cross-user prompt leak (#6493) (#6497) (@houko)&lt;/li&gt;
&lt;li&gt;Honour glob patterns in per-agent tool_allowlist/tool_blocklist (#6495) (#6498) (@houko)&lt;/li&gt;
&lt;li&gt;Approvals approve 415 false-success + status column in approvals list (#6492) (#6500) (@houko)&lt;/li&gt;
&lt;li&gt;Stop over-blocking MCP arguments that carry a long numeric id (#6499) (#6503) (@houko)&lt;/li&gt;
&lt;li&gt;Route post-approval reply through account-qualified outbound (#6492) (#6511) (@houko)&lt;/li&gt;
&lt;li&gt;Surface mid-stream provider errors instead of empty/garbled turns (#6512) (@houko)&lt;/li&gt;
&lt;li&gt;Release the token reservation on drop to stop a quota self-DoS (#6513) (@houko)&lt;/li&gt;
&lt;li&gt;Attribute owner-key spend and enforce per-user budget on authenticated API turns (#6514) (@houko)&lt;/li&gt;
&lt;li&gt;Honor response_format in the Gemini and Vertex AI drivers (#6515) (@houko)&lt;/li&gt;
&lt;li&gt;Treat [browser] config-reload as restart-required, not a false hot-reload (#6516) (@houko)&lt;/li&gt;
&lt;li&gt;Canonicalize provider before the per-user key lookup to stop an alias chargeback leak (#6517) (@houko)&lt;/li&gt;
&lt;li&gt;Serialize a canonical-session override on the per-agent lock to stop a lost-update race (#6518) (@houko)&lt;/li&gt;
&lt;li&gt;Scope MCP knowledge_add_* writes to the calling agent, not agent_id="" (#6519) (@houko)&lt;/li&gt;
&lt;li&gt;Recognize CHANGELOG attribution on a bullet's continuation lines (#6520) (@houko)&lt;/li&gt;
&lt;li&gt;Don't orphan another agent's relations when deleting a shared entity's first-writer (#6522) (@houko)&lt;/li&gt;
&lt;li&gt;Honor auto_approve and return 409 on double-resolve (#6492) (#6528) (@houko)&lt;/li&gt;
&lt;li&gt;Surface on-disk upload path to agents for every file type (#6531) (@neo-wanderer)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Changed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Normalize on-disk upload naming to . (#6530) (#6536) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documentation, maintenance, and other internal changes&lt;/p&gt;
&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Explain trusted_senders vs [[users]] RBAC composition (#6492) (#6507) (@houko)&lt;/li&gt;
&lt;li&gt;Document per-user key precedence over operator rotation (#6460) (#6510) (@houko)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Maintenance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bump the cargo-minor-patch group with 10 updates (#6452) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Bump tokio-tungstenite from 0.29.0 to 0.30.0 (#6453) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Update yanked spin 0.9.8 to 0.9.9 (#6454) (@houko)&lt;/li&gt;
&lt;li&gt;Bump the actions-minor-patch group with 3 updates (#6456) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Bump actions/setup-node from 6.4.0 to 7.0.0 (#6457) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Lock in env trust split across defer→approve→resume (follow-up to #6465) (#6467) (@houko)&lt;/li&gt;
&lt;li&gt;Bump the web-minor-patch group in /web with 5 updates (#6472) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Bump the dashboard-minor-patch group in /crates/librefang-api/dashboard with 6 updates (#6473) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Bump @eslint/js from 9.39.4 to 9.39.5 in /crates/librefang-api/dashboard (#6474) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Bump serde_with from 3.18.0 to 3.21.0 (#6475) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Bump the docs-minor-patch group in /docs with 4 updates (#6491) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Update model snapshot (#6523) (@houko)&lt;/li&gt;
&lt;li&gt;Bump wasmtime from 46.0.1 to 47.0.1 (#6527) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Bump the cargo-minor-patch group across 1 directory with 17 updates (#6533) (@app/dependabot)&lt;/li&gt;
&lt;li&gt;Migrate librefang-acp to agent-client-protocol 1.3.0 (supersedes #6526) (#6534) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.7.21" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.7.10 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Fri, 10 Jul 2026 10:39:58 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026710-released-4oh</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026710-released-4oh</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.7.10 Released
&lt;/h1&gt;

&lt;p&gt;This release unlocks &lt;strong&gt;extended thinking for reasoning models&lt;/strong&gt;, improves &lt;strong&gt;Slack formatting&lt;/strong&gt;, eliminates &lt;strong&gt;redundant artifact output&lt;/strong&gt;, and expands &lt;strong&gt;international reach&lt;/strong&gt;. Alongside that, we've locked down security advisories and made your test suites faster and more reliable.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;39 PRs from 4 contributors since v2026.6.29.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧠 Extended Thinking &amp;amp; Reasoning Support
&lt;/h3&gt;

&lt;p&gt;The OpenAI-compatible driver now correctly forwards &lt;code&gt;reasoning_effort&lt;/code&gt; to supported models, unlocking extended thinking and o1-style reasoning flows. If you're using Claude, o1, or other reasoning-enabled models, this is a substantial unlock for complex problem-solving agents that need to think deeply before acting.&lt;/p&gt;

&lt;h3&gt;
  
  
  💬 Native Slack Message Formatting
&lt;/h3&gt;

&lt;p&gt;Markdown messages sent to Slack are now automatically converted to Slack's native &lt;code&gt;mrkdwn&lt;/code&gt; format in the Slack sidecar. Your Slack agents now produce properly-formatted, native-looking messages instead of raw Markdown syntax — a small change that makes a big difference in readability.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎯 Smarter Output Deduplication
&lt;/h3&gt;

&lt;p&gt;Artifact read results are no longer re-spilled at the post-tool chokepoint, eliminating redundant output and keeping agent conversations cleaner. This is especially valuable in longer runs where output verbosity can distract from the actual work.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Dashboard Model Transparency
&lt;/h3&gt;

&lt;p&gt;The Codex CLI now exposes which model it's configured to run, visible directly in the dashboard. No more mystery about what's powering your agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌍 Internationalization
&lt;/h3&gt;

&lt;p&gt;Dashboard and website translations have been completed and proofread across multiple languages, opening LibreFang to a global community of developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛡️ Security &amp;amp; Reliability Hardening
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tests can now run offline with &lt;code&gt;LIBREFANG_REGISTRY_OFFLINE&lt;/code&gt;, removing network dependencies and accelerating your CI pipelines&lt;/li&gt;
&lt;li&gt;Multiple security advisories cleared: quick-xml, crossbeam-epoch, and cargo-deny all updated&lt;/li&gt;
&lt;li&gt;WS terminal frames now correctly correlate with chat turns, improving observability and debugging&lt;/li&gt;
&lt;li&gt;Fixed edge cases in media handling and TUI formatting for smoother operation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.7.10" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.6.29 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Mon, 29 Jun 2026 07:00:20 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026629-released-4pfe</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026629-released-4pfe</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.6.29 Released
&lt;/h1&gt;

&lt;p&gt;This release marks &lt;strong&gt;three major engineering priorities&lt;/strong&gt;: bringing LibreFang to global audiences, expanding hardware support, and squashing critical reliability edge cases. &lt;strong&gt;14 PRs from 4 contributors&lt;/strong&gt; landed since v2026.6.26-beta.24.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌍 Full Korean Language Support
&lt;/h3&gt;

&lt;p&gt;We've shipped complete Korean translations across the entire stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UI&lt;/strong&gt;: 233 language keys translated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI/TUI&lt;/strong&gt;: Commands and help text in Korean&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error messages&lt;/strong&gt;: Expanded from 43 to 233 localized keys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Korean-speaking developers and teams can now use LibreFang entirely in their language.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏗️ Multiplatform: ARM64 Linux &amp;amp; Android Ready
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;aarch64 Linux is now fully supported:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Official ARM64 binaries published to AUR and the project-maintained pacman repository alongside x86_64&lt;/li&gt;
&lt;li&gt;Android NDK cross-compilation fixed (legacy binutils symlink + PATH resolution)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deploy confidently on Raspberry Pi, Apple Silicon Linux containers, cloud ARM instances, and Android environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛡️ Reliability Fixes &amp;amp; Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mixed-media message batches&lt;/strong&gt; — edge case fixed where coalesced batches with mixed content types weren't enriched on the debounced path&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram setup form resilience&lt;/strong&gt; — stays available even if the describe call times out, preventing users from getting stuck mid-setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security patch&lt;/strong&gt; — bumped &lt;code&gt;pdf-extract&lt;/code&gt; to 0.12 to patch &lt;a href="https://rustsec.org/" rel="noopener noreferrer"&gt;RUSTSEC-2026-0187&lt;/a&gt; (lopdf vulnerability)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚡ Developer Experience
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Codex CLI&lt;/strong&gt; now works outside Git repositories — remove the requirement to run inside a &lt;code&gt;.git&lt;/code&gt; tree. Perfect for standalone scripts, CI pipelines, and one-off analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Changes at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Changes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Internationalization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Korean UI (#6349), Korean errors (#6353), Korean CLI/TUI (#6356)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multiplatform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;aarch64 packages (#6358), NDK binutils fix (#6335), NDK PATH fix (#6338)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reliability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Telegram setup (#6345), mixed-media enrichment (#6351), security patch (#6339)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Codex CLI outside Git (#6347)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AUR automation (#6341), pacman repo to R2 (#6352), CI improvements (#6340, #6346)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Detailed changelog&lt;/p&gt;
&lt;h3&gt;
  
  
  Added
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;UI Korean translation (#6349) (&lt;a class="mentioned-user" href="https://dev.to/seungjin"&gt;@seungjin&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Complete Korean error translations (43 → 233 keys) (#6353) (@houko)&lt;/li&gt;
&lt;li&gt;Add Korean (ko) translation for the CLI/TUI (#6356) (@houko)&lt;/li&gt;
&lt;li&gt;Publish aarch64 packages alongside x86_64 (#6334) (#6358) (@houko)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Fixed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bump pdf-extract 0.10→0.12 to patch lopdf RUSTSEC-2026-0187 (#6339) (@houko)&lt;/li&gt;
&lt;li&gt;Keep Telegram setup form available after describe timeout (#6345) (@pavver)&lt;/li&gt;
&lt;li&gt;Allow Codex CLI outside Git repositories (#6347) (@pavver)&lt;/li&gt;
&lt;li&gt;Enrich coalesced mixed-media batches on the debounced path (#6348) (#6351) (@houko)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Maintenance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Symlink legacy NDK binutils so vendored OpenSSL cross-compiles for Android (#6335) (@houko)&lt;/li&gt;
&lt;li&gt;Put NDK bin on PATH so openssl-src finds the legacy ranlib symlink (#6338) (@houko)&lt;/li&gt;
&lt;li&gt;Enable auto-merge instead of forcing --admin (#6340) (@houko)&lt;/li&gt;
&lt;li&gt;Publish AUR packages on release (#6334) (#6341) (@houko)&lt;/li&gt;
&lt;li&gt;Publish project-maintained pacman repo to R2 (#6334) (#6352) (@houko)&lt;/li&gt;
&lt;li&gt;Fix[flake.nix]: Add perl to nativeBuildInputs (#6346) (@FrantaNautilus)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.6.29" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>LibreFang 2026.4.27 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Mon, 04 May 2026 13:14:41 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026427-released-1pki</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026427-released-1pki</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.4.27 Released
&lt;/h1&gt;

&lt;p&gt;LibreFang v2026.4.27 ships the changes below. See the &lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md#2026-4-27" rel="noopener noreferrer"&gt;full changelog&lt;/a&gt; for the complete list.&lt;/p&gt;

&lt;h3&gt;
  
  
  Added
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TUI setup wizard now offers &lt;code&gt;microsoft&lt;/code&gt;, &lt;code&gt;zai&lt;/code&gt;, &lt;code&gt;zai_coding&lt;/code&gt;, &lt;code&gt;volcengine&lt;/code&gt;, &lt;code&gt;volcengine_coding&lt;/code&gt;, &lt;code&gt;byteplus&lt;/code&gt;, &lt;code&gt;byteplus_coding&lt;/code&gt; alongside the existing first-run options. The wizard's PROVIDERS list had drifted from &lt;code&gt;PROVIDER_REGISTRY&lt;/code&gt; and silently hid these from new installs; a unit test now pins these entries against future regressions. (@houko)&lt;/li&gt;
&lt;li&gt;Treat CLI logins as first-class default providers (#3061) (@houko)&lt;/li&gt;
&lt;li&gt;Grafana Tempo + business-level span instrumentation (#3064) (@houko)&lt;/li&gt;
&lt;li&gt;/new creates a new session instead of resetting the current one (#3071) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;Support image-generation models (registry modality field) (#3074) (@houko)&lt;/li&gt;
&lt;li&gt;Wire chat attachment uploads in ChatPage (#3075) (@houko)&lt;/li&gt;
&lt;li&gt;Add Novita AI as OpenAI-compatible provider (#3076) (@houko)&lt;/li&gt;
&lt;li&gt;Agent name prefix on outbound + Signal plain-text default (#3077) (@houko)&lt;/li&gt;
&lt;li&gt;SSE attach endpoint for multi-client session co-watching (#3078) (@houko)&lt;/li&gt;
&lt;li&gt;Add SearXNG self-hosted search provider (#3079) (@houko)&lt;/li&gt;
&lt;li&gt;Add AWS Bedrock provider with Bearer token auth (#3080) (@houko)&lt;/li&gt;
&lt;li&gt;AuditCheck framework + first 3 CLAUDE.md gotcha checks (#3082) (@houko)&lt;/li&gt;
&lt;li&gt;Add LlmFamily enum + LlmDriver::family() (#3083) (@houko)&lt;/li&gt;
&lt;li&gt;SSE attach hook for multi-client session co-watching (#3087) (@houko)&lt;/li&gt;
&lt;li&gt;Add ToolApprovalClass + tool_classifier (no behavior change yet) (#3092) (@houko)&lt;/li&gt;
&lt;li&gt;Session lifecycle event bus (additive, no subscribers yet) (#3093) (@houko)&lt;/li&gt;
&lt;li&gt;Support PDF and text/code file attachments end-to-end (#3094) (@houko)&lt;/li&gt;
&lt;li&gt;Trajectory export endpoint with privacy redaction (#3097) (@houko)&lt;/li&gt;
&lt;li&gt;Extend detect_embedding_provider with vLLM + LM Studio fallback (#3099) (@houko)&lt;/li&gt;
&lt;li&gt;Cron multi-destination delivery with failure isolation (#3102) (@houko)&lt;/li&gt;
&lt;li&gt;UI for cron multi-destination delivery targets (#3103) (@houko)&lt;/li&gt;
&lt;li&gt;Cache /config + reject pageno=0 + annotate truncation (#3108) (@houko)&lt;/li&gt;
&lt;li&gt;Re-read agent context.md per turn (#3115) (@houko)&lt;/li&gt;
&lt;li&gt;Central slash command registry (PR-1/3) (#3122) (@houko)&lt;/li&gt;
&lt;li&gt;Slash command registry — CLI/TUI surface (PR-2/3) (#3123) (@houko)&lt;/li&gt;
&lt;li&gt;Configurable max history messages (per-agent + global override) (#3125) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;System_and_3 prompt cache stamping for Anthropic (M1) (#3126) (@houko)&lt;/li&gt;
&lt;li&gt;ParallelSafety projection for batch tool dispatch (PR-1/6) (#3127) (@houko)&lt;/li&gt;
&lt;li&gt;Plan_batch + path-overlap planner for tool dispatch (PR-2/6) (#3129) (@houko)&lt;/li&gt;
&lt;li&gt;Model metadata lookup pipeline (PR-1/3, layers 1+2+5) (#3133) (@houko)&lt;/li&gt;
&lt;li&gt;Model metadata L3 cache + L4 Ollama probe (PR-2/3) (#3134) (@houko)&lt;/li&gt;
&lt;li&gt;Model metadata L4 Anthropic + OpenAI-compat probes (PR-2.5/3) (#3140) (@houko)&lt;/li&gt;
&lt;li&gt;KernelConfig.parallel_tools section (PR-3/6) (#3144) (@houko)&lt;/li&gt;
&lt;li&gt;Cron pre_script + silent_marker schema (PR-1/3) (#3145) (@houko)&lt;/li&gt;
&lt;li&gt;Cache_hit_ratio metric + trajectory field (M2/2) (#3149) (@houko)&lt;/li&gt;
&lt;li&gt;Agent detail drawer + filter pill i18n (#3159) (@houko)&lt;/li&gt;
&lt;li&gt;Right-side drawer pattern for inspect-detail surfaces (#3166) (@houko)&lt;/li&gt;
&lt;li&gt;Convert hand detail panel to drawer variant (#3168) (@houko)&lt;/li&gt;
&lt;li&gt;Roll out drawer/panel pattern across all page modals (#3175) (@houko)&lt;/li&gt;
&lt;li&gt;Add Jaeger as second trace backend alongside Tempo (#3176) (@houko)&lt;/li&gt;
&lt;li&gt;Granular MCP taint policy + dashboard tree editor (closes #3050) (#3193) (@houko)&lt;/li&gt;
&lt;li&gt;Jaeger trace backend + Loki/Alloy logs + CLI wiring (#3194) (@houko)&lt;/li&gt;
&lt;li&gt;Per-(agent, session) liveness tracking and session-scoped stop (#3195) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M2 — audit user/channel attribution + stable UserId (#3054) (#3196) (@houko)&lt;/li&gt;
&lt;li&gt;Hot-reload log_level via dashboard without daemon restart (#3200) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M4 — channel-native role mapping (Telegram/Discord/Slack) (#3054) (#3202) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M5 — audit query/export + per-user budget API (#3054) (#3203) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M3 — per-user tool policy + memory namespace ACL (#3054) (#3205) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M6 — dashboard (users, identity linking, simulator, CSV import + stubs) (#3054) (#3209) (@houko)&lt;/li&gt;
&lt;li&gt;Per-agent + global lane caps for trigger dispatch (#3210) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;Auto-download voice messages mirroring file path (#3212) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;Wip (#3213) (@houko)&lt;/li&gt;
&lt;li&gt;Hand agent runtime overrides with restart persistence (#3216) (@leszek3737)&lt;/li&gt;
&lt;li&gt;Deliver HealthCheckFailed to notification.alert_channels (#3218) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;Per-user budget write/clear endpoints + dashboard editor (#3224) (@houko)&lt;/li&gt;
&lt;li&gt;Activate AuditPage now that M5 audit endpoints shipped (#3225) (@houko)&lt;/li&gt;
&lt;li&gt;Per-action retention policy with chain-anchor trim (#3227) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC effective-permissions snapshot — wire simulator (#3054) (#3228) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M3 — per-user policy GET/PUT + dashboard editor (#3229) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC — single-decision authz/check endpoint (#3054) (#3231) (@houko)&lt;/li&gt;
&lt;li&gt;User-list summary flags + custom channel rule editor (#3229 follow-up) (#3232) (@houko)&lt;/li&gt;
&lt;li&gt;Owner-only API key rotation with live session kill (#3233) (@houko)&lt;/li&gt;
&lt;li&gt;External mount points in agent.toml (#3230) (#3234) (@houko)&lt;/li&gt;
&lt;li&gt;Channel field as dynamic dropdown with custom fallback (#3248) (@houko)&lt;/li&gt;
&lt;li&gt;URL-synced filters, JSON export, row detail modal (#3252) (@houko)&lt;/li&gt;
&lt;li&gt;Move filters into right-docked drawer (#3254) (@houko)&lt;/li&gt;
&lt;li&gt;BeforePromptBuild hook can contribute labeled DynamicSection injected into the system prompt, with 8KiB per-section / 32KiB total caps (closes #3326) (#3358) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fixed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reconnect WhatsApp gateway after transient disconnects (#21) (@houko)&lt;/li&gt;
&lt;li&gt;Render connection screen via custom URI scheme (closes #3052) (#3056) (@houko)&lt;/li&gt;
&lt;li&gt;Create log dir + open log before stdout redirect (#3057) (@houko)&lt;/li&gt;
&lt;li&gt;Surface CLI logins as their own providers, not API-provider fallbacks (#3059) (@houko)&lt;/li&gt;
&lt;li&gt;Pre-create logs dir in entrypoint (defense for #3058) (#3060) (@houko)&lt;/li&gt;
&lt;li&gt;Bundle compose stack in-binary, add OTLP collector (#3062) (@houko)&lt;/li&gt;
&lt;li&gt;Create HTTP trace spans at INFO so OTel exporter sees them (#3063) (@houko)&lt;/li&gt;
&lt;li&gt;Move env_filter to fmt layer so OTel sees INFO spans (#3065) (@houko)&lt;/li&gt;
&lt;li&gt;Drop ingester/compactor from Tempo config (#3067) (@houko)&lt;/li&gt;
&lt;li&gt;Boot-time TOML drift detection now reaches hand agents (#3068) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;Reprobe local providers every 60s + refresh on test (#3069) (@houko)&lt;/li&gt;
&lt;li&gt;Add missing files to src to fix librefang-cli build (#3073) (@FrantaNautilus)&lt;/li&gt;
&lt;li&gt;Honor session_mode=new with per-fire isolated sessions (#3081) (@houko)&lt;/li&gt;
&lt;li&gt;Copilot streaming empty tool calls + Claude assistant strip (#3084) (@houko)&lt;/li&gt;
&lt;li&gt;Gemini array-items default + first-message-must-be-user (#3085) (@houko)&lt;/li&gt;
&lt;li&gt;Safe UTF-8 boundary in three remaining truncation sites (#3086) (@houko)&lt;/li&gt;
&lt;li&gt;PowerShell sandbox bypass + agent-config persistence + WS race + Revolt self-host (#3088) (@houko)&lt;/li&gt;
&lt;li&gt;Cron preservation across hand reactivation + telegram startup timeout + token estimation includes ToolUse (#3090) (@houko)&lt;/li&gt;
&lt;li&gt;Capture text from intermediate tool_use iterations (#3091) (@houko)&lt;/li&gt;
&lt;li&gt;Percent-decode WS auth token to preserve base64 characters (#3095) (@houko)&lt;/li&gt;
&lt;li&gt;Skip heartbeat timeout for agents in their idle grace window (#3096) (@houko)&lt;/li&gt;
&lt;li&gt;Handle BrokenPipe gracefully in doctor --json (#3100) (@houko)&lt;/li&gt;
&lt;li&gt;UTF-8-safe error truncation + 502/504 retry + response classify tests (#3104) (@houko)&lt;/li&gt;
&lt;li&gt;Cap accumulated_text + document streaming non-redelivery contract (#3106) (@houko)&lt;/li&gt;
&lt;li&gt;Cron dedupe + next_run + token_length annotation (#3109) (@houko)&lt;/li&gt;
&lt;li&gt;Sticky has_processed_message replaces time-based grace (#3111) (@houko)&lt;/li&gt;
&lt;li&gt;Use 127.0.0.1 instead of localhost for local LLM URLs (#3112) (@houko)&lt;/li&gt;
&lt;li&gt;Pass agents_dir to hand route candidate scan to silence WARN flood (#3113) (@houko)&lt;/li&gt;
&lt;li&gt;Close non-loopback auth bypass when api_key is empty (#3114) (@houko)&lt;/li&gt;
&lt;li&gt;Downgrade pure-normalization to debug, keep WARN for real repair (#3117) (@houko)&lt;/li&gt;
&lt;li&gt;Use "default" provider/model in custom-agent template (#3121) (@houko)&lt;/li&gt;
&lt;li&gt;Forward api_key as Bearer in local provider probe (#3128) (@houko)&lt;/li&gt;
&lt;li&gt;Degrade Memory page gracefully when proactive memory is disabled (#3131) (@houko)&lt;/li&gt;
&lt;li&gt;Allow named workspaces in read-side path resolution (#3137) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;Unbreak cron_delivery tests + move guards to input validation (#3139) (@houko)&lt;/li&gt;
&lt;li&gt;Unbreak local provider config in GUI (#3141) (@houko)&lt;/li&gt;
&lt;li&gt;Re-render hand [[settings]] tail after boot-time TOML drift (#3142) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;Relax probe timeout for remote local-provider URLs (#3146) (@houko)&lt;/li&gt;
&lt;li&gt;Preserve tool annotations for parallel safety classification (PR-6/6) (#3147) (@houko)&lt;/li&gt;
&lt;li&gt;Include SearXNG in web_search_available check (#3152) (@houko)&lt;/li&gt;
&lt;li&gt;Drop redundant runtime SSRF check in deliver_webhook (#3155) (@houko)&lt;/li&gt;
&lt;li&gt;Add .desktop entry and install icon (#3157) (@FrantaNautilus)&lt;/li&gt;
&lt;li&gt;Seed [[settings]] defaults into hand instance config on activation (#3160) (@houko)&lt;/li&gt;
&lt;li&gt;Skip empty Blocks when stamping prompt cache markers (review fix for #3126) (#3161) (@houko)&lt;/li&gt;
&lt;li&gt;Expose vLLM + LM Studio in embedding provider dropdown (refs #3138) (#3162) (@houko)&lt;/li&gt;
&lt;li&gt;Re-render Reference Knowledge + Your Team tails after TOML drift (#3164) (@houko)&lt;/li&gt;
&lt;li&gt;Provide .desktop entry and icon for librefang-desktop (#3156) (#3165) (@houko)&lt;/li&gt;
&lt;li&gt;Regenerate config_schema golden after parallel_tools addition (#3167) (@houko)&lt;/li&gt;
&lt;li&gt;Stop drawer scroll chaining into the page (#3169) (@houko)&lt;/li&gt;
&lt;li&gt;Observability auto-start opt-in + home_dir isolation + RAII cleanup (#3170) (@houko)&lt;/li&gt;
&lt;li&gt;Surface provider model list above the fold (#3179) (@houko)&lt;/li&gt;
&lt;li&gt;Wire OS keyring (libsecret/Keychain/Credential Manager) (#3180) (@houko)&lt;/li&gt;
&lt;li&gt;Wrap with wrapGAppsHook3 so tray icon resolves on NixOS (#3197) (@houko)&lt;/li&gt;
&lt;li&gt;Probe OpenAI fallback for ollama-slot servers, hide non-discovered local models (#3204) (@houko)&lt;/li&gt;
&lt;li&gt;Correct max_level_hint test assertions (#3206) (@houko)&lt;/li&gt;
&lt;li&gt;Correct max_level_hint test assertions (#3207) (@houko)&lt;/li&gt;
&lt;li&gt;Set sender_user_id metadata so RBAC works in groups (#3215) (@neo-wanderer)&lt;/li&gt;
&lt;li&gt;Serialize channel config writes via toml_edit + lock (#3183) (#3223) (@houko)&lt;/li&gt;
&lt;li&gt;Attribute loopback callers to user_api_keys when token provided (#3236) (@houko)&lt;/li&gt;
&lt;li&gt;Invalidate effective-permissions on policy/budget mutations (#3228 follow-up) (#3237) (@houko)&lt;/li&gt;
&lt;li&gt;Prefix sender_chat ids so they can't collide with user namespace (#3215 follow-up) (#3238) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M3 follow-up — memory ACL fail-closed for anonymous callers (#3239) (@houko)&lt;/li&gt;
&lt;li&gt;Include prev_hash so verifiers can replay the chain (#3203 follow-up) (#3240) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M4 follow-up — role_cache reload + Telegram DM owner-escalation (#3241) (@houko)&lt;/li&gt;
&lt;li&gt;Mark scope as user_policy_only to match implementation (#3231 follow-up) (#3242) (@houko)&lt;/li&gt;
&lt;li&gt;Attribute admin actions to caller + log old-&amp;gt;new diffs (#21 follow-up) (#3245) (@houko)&lt;/li&gt;
&lt;li&gt;Harden CSV import + flag identity-link risk (#3209 follow-up) (#3246) (@houko)&lt;/li&gt;
&lt;li&gt;RBAC M3 follow-up — namespace traversal + case-insensitive deny + memory audit emit (#3205) (#3249) (@houko)&lt;/li&gt;
&lt;li&gt;Autonomous-loop tool calls bypass user gate (closes #3243) (#3251) (@houko)&lt;/li&gt;
&lt;li&gt;Channel dropdown uses /api/channels for full 44-adapter list (#3253) (@houko)&lt;/li&gt;
&lt;li&gt;Enforce deterministic ordering for LLM-bound MCP server / skill registries to stabilize provider prompt cache (closes #3298) (#3325) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Changed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Derive JSON Schema from KernelConfig via schemars (#3055) (@houko)&lt;/li&gt;
&lt;li&gt;Extract SessionStore trait alongside SQLite substrate (#3089) (@houko)&lt;/li&gt;
&lt;li&gt;Make bridge helpers crate-private (#3181) (@houko)&lt;/li&gt;
&lt;li&gt;Remove unused public helpers (#3182) (@houko)&lt;/li&gt;
&lt;li&gt;Tighten visibility of internal request structs (#3184) (@houko)&lt;/li&gt;
&lt;li&gt;Merge duplicate type definitions across crates (#3185) (@houko)&lt;/li&gt;
&lt;li&gt;Rename Action enums to disambiguate from domain types (#3188) (@houko)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BREAKING&lt;/strong&gt;: Split coding-provider API keys onto dedicated env vars — &lt;code&gt;byteplus_coding&lt;/code&gt; now reads &lt;code&gt;BYTEPLUS_CODING_API_KEY&lt;/code&gt; (was &lt;code&gt;BYTEPLUS_API_KEY&lt;/code&gt;), &lt;code&gt;volcengine_coding&lt;/code&gt; reads &lt;code&gt;VOLCENGINE_CODING_API_KEY&lt;/code&gt; (was &lt;code&gt;VOLCENGINE_API_KEY&lt;/code&gt;), &lt;code&gt;zai_coding&lt;/code&gt; reads &lt;code&gt;ZAI_CODING_API_KEY&lt;/code&gt; (was &lt;code&gt;ZHIPU_API_KEY&lt;/code&gt;), &lt;code&gt;zhipu_coding&lt;/code&gt; reads &lt;code&gt;ZHIPU_CODING_API_KEY&lt;/code&gt; (was &lt;code&gt;ZHIPU_API_KEY&lt;/code&gt;). Per-token siblings (&lt;code&gt;byteplus&lt;/code&gt;, &lt;code&gt;volcengine&lt;/code&gt;, &lt;code&gt;zai&lt;/code&gt;, &lt;code&gt;zhipu&lt;/code&gt;) keep their original env vars. Set the new env var if you use any &lt;code&gt;_coding&lt;/code&gt; provider. (#3279) (@houko)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BREAKING&lt;/strong&gt;: Register &lt;code&gt;microsoft&lt;/code&gt; (GitHub Models / Azure AI Inference) as an explicit driver-registry entry with its own &lt;code&gt;GITHUB_MODELS_TOKEN&lt;/code&gt; env var, distinct from &lt;code&gt;github-copilot&lt;/code&gt;'s &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;. Same PAT works for both, but the env vars are now separate so configuring one product no longer auto-activates the other in the model picker. Set &lt;code&gt;GITHUB_MODELS_TOKEN&lt;/code&gt; if you use the &lt;code&gt;microsoft&lt;/code&gt; provider. (#3281) (@houko)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BREAKING&lt;/strong&gt;: Split &lt;code&gt;zai&lt;/code&gt; from sharing &lt;code&gt;ZHIPU_API_KEY&lt;/code&gt; with &lt;code&gt;zhipu&lt;/code&gt; — &lt;code&gt;zai&lt;/code&gt; (api.z.ai) now reads &lt;code&gt;ZAI_API_KEY&lt;/code&gt; while &lt;code&gt;zhipu&lt;/code&gt; (open.bigmodel.cn) keeps &lt;code&gt;ZHIPU_API_KEY&lt;/code&gt;. Same Zhipu credential value works for both, but the env vars are now separate so configuring one no longer auto-activates the other. Set &lt;code&gt;ZAI_API_KEY&lt;/code&gt; if you use the &lt;code&gt;zai&lt;/code&gt; provider. (#3285) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add tool_timeouts configuration documentation (#3098) (@leszek3737)&lt;/li&gt;
&lt;li&gt;Backfill reference for cron / config / providers / channels / api / observability (#3189) (@houko)&lt;/li&gt;
&lt;li&gt;Clarify worktree continuation drives to PR (#3190) (@houko)&lt;/li&gt;
&lt;li&gt;Align left nav with file tree (#3199) (@houko)&lt;/li&gt;
&lt;li&gt;Backfill source-vs-doc gaps (providers / channels — config / API / CLI to follow) (#3201) (@houko)&lt;/li&gt;
&lt;li&gt;Drop HTML comment that broke Deploy Docs on main (#3208) (@houko)&lt;/li&gt;
&lt;li&gt;Align Chinese translations with English source (#3220) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Maintenance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rename normalize_schema_recursive + warn on items fallback (#3105) (@houko)&lt;/li&gt;
&lt;li&gt;Document apply_agent_prefix idempotency caveats (#3107) (@houko)&lt;/li&gt;
&lt;li&gt;Timing-side-channel mitigation in percent_decode (#3110) (@houko)&lt;/li&gt;
&lt;li&gt;Align localhost test expectations with #3112 default change (#3118) (@houko)&lt;/li&gt;
&lt;li&gt;Ignore local .plans/ working notes directory (#3130) (@houko)&lt;/li&gt;
&lt;li&gt;Sync librefang-types tracing dep into Cargo.lock (#3132) (@houko)&lt;/li&gt;
&lt;li&gt;Unbreak main — cargo fmt for model_metadata.rs (#3150) (@houko)&lt;/li&gt;
&lt;li&gt;Unbreak main — fix clippy manual_pattern_char_comparison (#3153) (@houko)&lt;/li&gt;
&lt;li&gt;Hand-level skills propagation regression for #3135 (#3163) (@houko)&lt;/li&gt;
&lt;li&gt;Pull librefang-api into selective lane on librefang-types changes (#3171) (@houko)&lt;/li&gt;
&lt;li&gt;Drop LEGACY_TEAM_TAIL_MARKER fallback (#3177) (@houko)&lt;/li&gt;
&lt;li&gt;Install libdbus-1-dev for OpenAPI Drift job (#3186) (@houko)&lt;/li&gt;
&lt;li&gt;Remove unused dependencies across workspace (#3187) (@houko)&lt;/li&gt;
&lt;li&gt;Pin push_notification routing for health_check_failed (#3222) (@houko)&lt;/li&gt;
&lt;li&gt;Unbreak typecheck on sessions-stream test (#3235) (@houko)&lt;/li&gt;
&lt;li&gt;Unbreak typecheck on UserBudgetPage + duplicate type export (#3244) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Other
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Unbreak main — use local user_api_keys snapshot (#3250) (@houko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md#2026-4-27" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.4.27" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
    <item>
      <title>We just launched the new LibreFang website</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Wed, 25 Mar 2026 08:13:52 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/we-just-launched-the-new-librefang-website-342b</link>
      <guid>https://dev.to/suzukazehaduki/we-just-launched-the-new-librefang-website-342b</guid>
      <description>&lt;p&gt;We just shipped the new &lt;a href="https://librefang.ai" rel="noopener noreferrer"&gt;librefang.ai&lt;/a&gt; — a complete redesign of the official website for &lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;LibreFang&lt;/a&gt;, our open-source Agent Operating System built in Rust.&lt;/p&gt;

&lt;p&gt;If you haven't heard of LibreFang: it's a production-grade runtime for autonomous AI agents. Single binary, 180ms cold start, 40MB memory. 15 built-in autonomous capability units ("Hands"), 44 channel adapters, 50 LLM providers. It runs agents 24/7 on a schedule — no user prompts needed.&lt;/p&gt;

&lt;p&gt;Here's what we built for the new site.&lt;/p&gt;

&lt;h2&gt;
  
  
  7 languages, day one
&lt;/h2&gt;

&lt;p&gt;The site ships with full translations in English, 简体中文, 繁體中文, 日本語, 한국어, Deutsch, and Español. Not machine-translated placeholders — every string was reviewed for grammar and natural phrasing.&lt;/p&gt;

&lt;p&gt;Language detection is automatic based on your browser, and you can switch anytime from the nav.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture visualized
&lt;/h2&gt;

&lt;p&gt;The homepage walks through LibreFang's five-layer architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Channels&lt;/strong&gt; — 44 adapters: Telegram, Slack, Discord, WhatsApp, Signal, Matrix, Teams, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hands&lt;/strong&gt; — 15 autonomous units, each with its own model, tools, and workflow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kernel&lt;/strong&gt; — agent lifecycle, workflow orchestration, budget control, scheduling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime&lt;/strong&gt; — Tokio async, WASM sandbox, Merkle audit chain, SSRF protection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware&lt;/strong&gt; — runs everywhere: laptop, VPS, Raspberry Pi, bare metal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each layer is interactive — click to explore the components inside.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance benchmarks, not marketing claims
&lt;/h2&gt;

&lt;p&gt;We put a comparison table right on the homepage:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Others&lt;/th&gt;
&lt;th&gt;LibreFang&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cold Start&lt;/td&gt;
&lt;td&gt;2.5 ~ 4s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;180ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Idle Memory&lt;/td&gt;
&lt;td&gt;180 ~ 250MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;40MB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binary Size&lt;/td&gt;
&lt;td&gt;100 ~ 200MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;32MB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security Layers&lt;/td&gt;
&lt;td&gt;2 ~ 3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Channel Adapters&lt;/td&gt;
&lt;td&gt;8 ~ 15&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;44&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in Hands&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rust, not TypeScript. Production, not prototype.&lt;/p&gt;

&lt;h2&gt;
  
  
  One command install with OS detection
&lt;/h2&gt;

&lt;p&gt;The install section detects your OS automatically and shows the right command:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;macOS / Linux:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://librefang.ai/install | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows (PowerShell):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://librefang.ai/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tabs let you switch between macOS, Windows, and Linux manually too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Downloads &amp;amp; changelog
&lt;/h2&gt;

&lt;p&gt;The downloads section pulls release data in real-time through our own API proxy. Desktop apps, CLI binaries, everything categorized by platform.&lt;/p&gt;

&lt;p&gt;The changelog page shows a full timeline of releases with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Category filters (features, fixes, etc.)&lt;/li&gt;
&lt;li&gt;Download counts per asset&lt;/li&gt;
&lt;li&gt;Auto-linked &lt;code&gt;#issue&lt;/code&gt; references and &lt;code&gt;@username&lt;/code&gt; mentions in release notes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React + TypeScript + Vite&lt;/li&gt;
&lt;li&gt;Tailwind CSS for styling&lt;/li&gt;
&lt;li&gt;Framer Motion for animations&lt;/li&gt;
&lt;li&gt;TanStack Query for data fetching&lt;/li&gt;
&lt;li&gt;Cloudflare Workers for the GitHub stats proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No heavy frameworks. No CMS. Just a fast SPA that gets out of your way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;LibreFang itself is moving fast — WhatsApp bidirectional routing just landed, prompt versioning and A/B experiments are in, and we're working toward the v1.0 milestone.&lt;/p&gt;

&lt;p&gt;The website will keep evolving with the project. Docs are at &lt;a href="https://docs.librefang.ai" rel="noopener noreferrer"&gt;docs.librefang.ai&lt;/a&gt;, and the deploy page at &lt;a href="https://deploy.librefang.ai" rel="noopener noreferrer"&gt;deploy.librefang.ai&lt;/a&gt; has one-click options for Fly.io and more.&lt;/p&gt;




&lt;p&gt;If this sounds interesting, check out the repo: &lt;strong&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;github.com/librefang/librefang&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're open source, merge-first PR policy, and all contributions are welcome. Drop a ⭐ if you like what you see.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>rust</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>LibreFang 2026.3.22 Released</title>
      <dc:creator>涼風羽月</dc:creator>
      <pubDate>Sat, 21 Mar 2026 16:32:36 +0000</pubDate>
      <link>https://dev.to/suzukazehaduki/librefang-2026322-released-gh1</link>
      <guid>https://dev.to/suzukazehaduki/librefang-2026322-released-gh1</guid>
      <description>&lt;h1&gt;
  
  
  LibreFang 2026.3.22 Released
&lt;/h1&gt;

&lt;p&gt;We're thrilled to announce &lt;strong&gt;LibreFang v2026.3.22&lt;/strong&gt; — a massive release with expanded provider support, powerful new capabilities, and a completely overhauled dashboard. This release marks our evolution to Calendar Versioning and brings 50+ improvements across the entire platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📊 Major Architecture Update: Calendar Versioning
&lt;/h3&gt;

&lt;p&gt;We've switched to &lt;strong&gt;CalVer (YYYY.M.DDHH)&lt;/strong&gt; for more transparent and predictable release cycles. This change makes it easier to track what's fresh and plan your upgrades accordingly.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔌 Expanded Provider Ecosystem
&lt;/h3&gt;

&lt;p&gt;Connect to virtually any LLM provider now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New providers&lt;/strong&gt;: DeepInfra, Azure OpenAI, Qwen International/US endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT device auth flow&lt;/strong&gt; for seamless authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom model support&lt;/strong&gt; with proper alias registration and provider routing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedding dimensions&lt;/strong&gt; configurable per agent — fine-tune costs and quality&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤖 Agent &amp;amp; Workflow Superpowers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline runner agents&lt;/strong&gt; let you orchestrate complex multi-step workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMAP email reader script&lt;/strong&gt; for email-triggered automation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WorkflowTemplate registry&lt;/strong&gt; (in-memory) for reusable workflow definitions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-agent plugin scoping&lt;/strong&gt; with granular &lt;code&gt;allowed_plugins&lt;/code&gt; config&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful context reset&lt;/strong&gt; via &lt;code&gt;/reboot&lt;/code&gt; slash command&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚙️ Configuration &amp;amp; Persistence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Global workspace directory&lt;/strong&gt; for cross-session state persistence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom log directory config&lt;/strong&gt; — store logs anywhere you want&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Config validation with tolerant mode&lt;/strong&gt; — cleaner error messages, safer defaults&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arbitrary config keys in skills&lt;/strong&gt; — unlimited flexibility for custom skill parameters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurable session reset prompt&lt;/strong&gt; — personalize context resets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge query improvements&lt;/strong&gt; — JOIN matches entities by name or ID, indexed by agent&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💬 Chat Platform Enhancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slack&lt;/strong&gt;: Unfurl links option, force-flat replies config for cleaner threads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discord&lt;/strong&gt;: Configurable mention patterns for smarter mentions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HAND.toml format&lt;/strong&gt; now accepts flexible [hand] wrappers for better compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Performance &amp;amp; Stability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Infinite retry guard&lt;/strong&gt; — prevents runaway loops&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming safety&lt;/strong&gt; — prevent interrupts during multi-tool sequences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory caching&lt;/strong&gt; — workspace and skill metadata cached to reduce per-message overhead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized KV operations&lt;/strong&gt; — faster, more efficient state management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration tools&lt;/strong&gt; — refresh param for cache bypassing, sparse chart data handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved polling detection&lt;/strong&gt; — replaced fragile heuristics with robust LoopGuard&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 Dashboard &amp;amp; UX
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complete React UI/UX overhaul&lt;/strong&gt; — modern, responsive, beautiful&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Japanese localization&lt;/strong&gt; + comprehensive i18n coverage for goals/analytics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SVG branding banners&lt;/strong&gt; — fresh promotional materials&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixed navigation&lt;/strong&gt; — better link structure and mobile indicators&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dev server integration&lt;/strong&gt; — &lt;code&gt;just api&lt;/code&gt; now starts dashboard + API together&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🛠️ Developer Experience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rustfmt.toml&lt;/strong&gt; for consistent code formatting across the project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version &amp;amp; git hash in startup logs&lt;/strong&gt; — instant transparency on what's running&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop app &lt;code&gt;.env&lt;/code&gt; support&lt;/strong&gt; — easier local configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Homebrew Cask CI sync&lt;/strong&gt; — streamlined distribution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Qwen Code CLI detection&lt;/strong&gt; — smoother integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚 Documentation
&lt;/h3&gt;

&lt;p&gt;Comprehensive review — fixed errors, updated all numbers, filled missing gaps.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Infrastructure &amp;amp; CI/CD
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Stats Worker&lt;/strong&gt; integration for better analytics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-update PR branches&lt;/strong&gt; on main push&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Compose fixes&lt;/strong&gt; for admin interface port binding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server names&lt;/strong&gt; now allow hyphens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Release.sh macOS compatibility&lt;/strong&gt; — no more grep headaches&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Pages SPA fallback&lt;/strong&gt; — corrected _redirects format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PWA manifest &amp;amp; OG image&lt;/strong&gt; fixes for better sharing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install / Upgrade
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Binary&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.librefang.ai | sh

&lt;span class="c"&gt;# Rust SDK&lt;/span&gt;
cargo add librefang

&lt;span class="c"&gt;# JavaScript SDK&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @librefang/sdk

&lt;span class="c"&gt;# Python SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;librefang-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/releases/tag/v2026.3.2201" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/DzTYqAZZmc" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/librefang/librefang/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>release</category>
    </item>
  </channel>
</rss>
