What's New
A summary of notable changes across the herdctl packages. For the full technical details of every release, see the CHANGELOG.md in each package directory.
Discord File Attachment Support
Section titled “Discord File Attachment Support”March 10, 2026 · @herdctl/discord@1.2.0 · @herdctl/core@5.10.0
Discord bots can now process file attachments uploaded alongside messages. When users attach files to their Discord messages, the connector automatically detects and processes them based on file type. Text and code files are downloaded and inlined directly into the agent’s prompt, while images and PDFs are saved to the agent’s working directory with a file path reference so the agent can use its Read tool to view them. File handling is fully configurable via chat.discord.attachments settings, including file size limits, allowed file types, and automatic cleanup after processing. #194
CLI Runtime MCP Server Support
Section titled “CLI Runtime MCP Server Support”March 10, 2026 · @herdctl/core@5.10.0
The CLI runtime now supports injected MCP servers, enabling features like file uploads for Discord and Slack agents running with runtime: cli. Previously, only SDK and Docker runtimes handled injected MCP servers while CLI silently ignored them. The implementation reuses existing MCP-HTTP-bridge infrastructure by starting HTTP bridges on localhost for each injected server and passing them via --mcp-config as HTTP-type MCP servers. This brings CLI runtime to feature parity with SDK and Docker runtimes for chat platform integrations. #194
Slack Message Deduplication Fix
Section titled “Slack Message Deduplication Fix”March 10, 2026 · @herdctl/slack@1.2.13
Fixed duplicate messages appearing in Slack channels when agents respond. Claude Code can emit intermediate JSONL snapshots (with stop_reason: null) before the final assistant message. The Slack manager now skips these intermediate snapshots and deduplicates by message.id to ensure only finalized messages are sent to channels. #194
Tool Availability Restriction
Section titled “Tool Availability Restriction”March 5, 2026 · @herdctl/core@5.9.0 · herdctl@1.5.6
Added a new tools configuration field for restricting which built-in tools are available to agents. Unlike allowed_tools (which only controls permission prompts), the tools field completely removes tools from the agent’s environment. This is a whitelist approach — only the tools you specify will be available. For example, setting tools: [Bash, Read, Write] ensures the agent cannot use Grep, Edit, or any other tools regardless of permission settings. Use this when you need hard enforcement of tool availability rather than soft permission boundaries.
Discord Typing Indicator Control
Section titled “Discord Typing Indicator Control”March 5, 2026 · @herdctl/discord@1.1.0 · herdctl@1.5.5
Discord bots can now disable the typing indicator via output.typing_indicator: false in their agent config. The typing indicator can cause spurious “An unknown error occurred” messages in Discord when the bot’s processing time exceeds Discord’s rate limit window, particularly on long-running jobs. Disabling the indicator prevents these confusing error messages while the agent continues working normally in the background. The default remains true to preserve existing behavior.
Docker Session Discovery and Security Fixes
Section titled “Docker Session Discovery and Security Fixes”March 5, 2026 · @herdctl/core@5.9.0 · herdctl@1.5.6
Fixed Docker agent sessions not appearing in the web dashboard. Docker agents store session JSONL files in .herdctl/docker-sessions/ on the host (the container’s ~/.claude/projects/ is ephemeral), but the session discovery service only scanned the latter. The web UI now correctly discovers and displays Docker agent conversations. Session message retrieval, metadata, and usage statistics all work properly for containerized agents. Additionally, session ID path helpers now validate against path traversal attacks — session IDs must contain only alphanumeric characters and hyphens to prevent malicious IDs like ../../etc/passwd from escaping intended directories.
AutoCLAUDE - Automated CLAUDE.md Maintenance
Section titled “AutoCLAUDE - Automated CLAUDE.md Maintenance”March 3, 2026
Introduced AutoCLAUDE, a repeatable audit system that measures all CLAUDE.md files against the gold standard (canon/claude-md-gold-standard.md). The audit checks six dimensions: inventory (file presence vs. declared list), size compliance (line count targets by file level), style (imperative vs. descriptive phrasing), content appropriateness (no duplication from parent files), staleness (broken references to moved/deleted code), and coverage gaps (directories missing CLAUDE.md when they need one). Run via the /audit-claude-md skill, which spawns four specialized sub-agents in parallel and produces a consolidated report in .reports/claude/. The first audit run found 19 issues across 8 files. Audit and remediation are separate steps — the system identifies problems but doesn’t auto-fix them.
GitHub Issue Delegation Skills
Section titled “GitHub Issue Delegation Skills”February 26, 2026
Added two new Claude Code skills for automated GitHub issue fixing. The /delegate-issue <issue-number> skill clones your repository, launches an autonomous Claude Code worker in a sandboxed directory, and monitors its progress while it fixes the issue and opens a PR. The /delegate-issues <issue-1> <issue-2> ... skill orchestrates parallel workers for batch issue fixing, launching one sub-agent per issue and providing a unified summary with all PR links when complete. Each worker operates independently with its own repository clone and session, making it safe to process multiple issues simultaneously without conflicts.
Web Sidebar Session Refresh Improvements
Section titled “Web Sidebar Session Refresh Improvements”February 26, 2026 · @herdctl/web@0.9.6
Fixed sidebar session lists not updating when sessions are created or modified externally. The Fleet and Chats tabs now refresh automatically whenever any chat completes (not just new chats), with a 2-second debounce to prevent excessive updates during multi-turn conversations. Sessions created from the CLI, Discord, Slack, or other browser tabs now appear in the sidebar immediately without requiring a page reload.
Session Discovery and Search Fixes
Section titled “Session Discovery and Search Fixes”February 26, 2026 · @herdctl/web@0.9.5 · @herdctl/core@5.8.2
Fixed new web chat sessions not appearing in the sidebar due to stale attribution cache. The SessionDiscoveryService now invalidates its 30-second attribution cache immediately after creating a new session, ensuring getAgentSessions() includes the newly written session. Also fixed session search to include the autoName field, making sessions with auto-generated names (but no custom name) searchable. Extracted sessionMatchesQuery to a shared utility to prevent code duplication across components.
All Chats Page and Session Discovery
Section titled “All Chats Page and Session Discovery”February 25, 2026 · @herdctl/web@0.9.0 · @herdctl/core@5.7.0
The web dashboard now includes a machine-wide “All Chats” view showing every Claude Code session on your system, grouped by working directory. Sessions are enriched with origin badges (Web, CLI, Discord, Slack, or Schedule) indicating where the conversation originated. You can now interact with unattributed CLI sessions directly from the dashboard — click any native Claude Code session to resume it in an interactive ad hoc chat view that works just like fleet agent chats. Session names are auto-generated from Claude summaries when available, and session previews display the first user message instead of “New conversation”. Sidechain sessions (sub-agent warmup) are filtered from the UI to reduce noise. When multiple agents share a working directory, each agent’s session list now shows only its own sessions instead of duplicating all sessions across every agent.
Web Chat Bug Fixes and Zero-Config Start
Section titled “Web Chat Bug Fixes and Zero-Config Start”February 25, 2026 · @herdctl/web@0.9.4 · @herdctl/core@5.8.0
Fixed two critical chat bugs: messages from concurrent chats in different agents no longer leak into the wrong chat window, and new chats now appear in the sidebar immediately after the first message instead of requiring a refresh. The WebSocket message handler now tracks both the active session and agent to prevent cross-contamination. Additionally, herdctl start now boots the web dashboard in web-only mode when no herdctl.yaml is found, enabling npx herdctl start to work out of the box for browsing Claude Code sessions without any fleet configuration.
Tool Name Display Fix
Section titled “Tool Name Display Fix”February 25, 2026 · @herdctl/core@5.8.1
Fixed “unknown” tool names appearing in chat views when Claude Code writes parallel tool calls. The JSONL parser was deduplicating messages before extracting tool IDs, causing secondary tool names to be lost. Tool parsing now happens before deduplication to preserve all tool identifiers.
Agent Distribution System
Section titled “Agent Distribution System”February 24, 2026 · @herdctl/core@5.6.0 · herdctl@1.4.0
Agents can now be installed, managed, and shared like packages. Use herdctl agent add <source> to install agents from GitHub repositories or local paths, with automatic validation, environment variable scanning, and fleet configuration updates. The new herdctl agent command group includes list (view all installed and manual agents with tree view support for sub-fleets), info (detailed agent metadata), and remove (clean agent removal). The herdctl init command has been split into herdctl init fleet (create fleet template) and herdctl init agent (interactive agent wizard) for clearer workflow separation. Agent repositories use a herdctl.json metadata file to declare author, description, version, and required environment variables.
Web Chat Info Sidebar with Session Actions
Section titled “Web Chat Info Sidebar with Session Actions”February 23, 2026 · @herdctl/web@0.8.0
The web chat interface now includes a toggleable info sidebar showing real-time session statistics and actions. View context window usage (input + cache tokens) with a progress bar indicating approximate fill percentage, see API call counts, and access session metadata including message count, model, working directory, and creation date. A “Continue in Claude Code” button generates the resume command for picking up conversations in your terminal (disabled for Docker agents). The sidebar persists your open/closed preference and automatically hides on smaller screens. Fleet startup is now more resilient: chat platforms (Web, Slack, Discord) initialize in parallel so a slow connection on one platform won’t block others from starting.
Tabbed Sidebar with Spotlight Search
Section titled “Tabbed Sidebar with Spotlight Search”February 22, 2026 · @herdctl/web@0.7.0 · herdctl@1.3.9
The web dashboard sidebar has been redesigned with two tabs: Fleet for browsing your agent hierarchy, and Chats for viewing recent conversations across all agents. The Fleet tab now includes search filtering and collapsible agent rows. The Chats tab shows recent conversations with search, inline rename/delete actions, and current-chat highlighting. Press Cmd+K (or Ctrl+K) to open a Spotlight-style quick picker for instant new chat creation. Agent detail pages now include a Chats tab showing all conversations for that specific agent. Recent session state syncs in real-time across all views when you create, rename, or delete chats.
Architecture Documentation Consolidation
Section titled “Architecture Documentation Consolidation”February 22, 2026
The herdctl documentation site now features a comprehensive Architecture section with 14 authoritative pages consolidating 65+ scattered PRDs, specs, implementation plans, and handoff documents. Each page (Overview, Configuration, State Management, Runner, Scheduler, Job System, Chat Infrastructure, Discord, Slack, Web Dashboard, CLI, Docker Runtime, Work Sources, HTTP API) is written as factual present-tense documentation verified against source code. The old 5-page Internals section has been replaced with redirects to the new architecture pages. All diagrams have been migrated from Mermaid to D2 for professional-quality rendering with consistent brand colors.
Chat Session Management Improvements
Section titled “Chat Session Management Improvements”February 22, 2026 · @herdctl/web@0.6.0 · @herdctl/core@5.5.0 · herdctl@1.3.8
The web dashboard now includes comprehensive chat session management features. Delete chat sessions directly from the sidebar by hovering over a chat to reveal trash and pencil icons. Deleted sessions are removed immediately with a confirmation step. Additionally, you can now configure how agent messages are displayed: choose between “separate” mode (each assistant turn as its own bubble) or “grouped” mode (consecutive turns merged into one). The preference is saved in your browser and can be toggled via a new chat settings control. Also includes a critical fix for session cross-contamination when SDK session mappings were missing, ensuring each web chat always starts with the correct conversation context.
Inline Chat Session Renaming and Dashboard Improvements
Section titled “Inline Chat Session Renaming and Dashboard Improvements”February 21, 2026 · @herdctl/web@0.5.0 · @herdctl/core@5.4.3 · herdctl@1.3.7
Chat sessions in the web dashboard sidebar can now be renamed inline. Click the pencil icon (visible on hover) to edit the session name, press Enter to save or Escape to cancel. Custom names take precedence over auto-generated previews. This release also fixes agent link navigation issues (jobs now store qualified names like herdctl.engineer for correct routing) and renames the schedule expression field to the more intuitive cron field (the old name still works for backward compatibility). Misconfigured schedules now log warnings only once instead of spamming every scheduler tick. The dashboard’s “Recent Jobs” section no longer appears empty when no jobs have run in the last 24 hours.
Shell Escaping Fix for Docker CLI Runtime
Section titled “Shell Escaping Fix for Docker CLI Runtime”February 21, 2026 · @herdctl/core@5.5.0
Fixed a critical bug where special characters in prompts ($ and backticks) were being interpreted by the shell instead of passed literally to agents running in Docker CLI mode. Previously, prompts containing dollar signs (e.g., “Analyze $1234 in sales data”) would have $1 consumed by shell variable expansion, silently corrupting the agent’s input. All prompts are now properly escaped before being passed to Docker containers.
Pre-commit Hooks and iOS Safari Fix
Section titled “Pre-commit Hooks and iOS Safari Fix”February 21, 2026 · @herdctl/web@0.4.0
Added pre-commit hooks to enforce code quality checks before commits. Fixed an iOS Safari issue where focusing on the chat input field would trigger aggressive auto-zoom, making the interface difficult to use on mobile devices. The input field now uses a 16px font size to prevent Safari’s zoom behavior.
Software Engineer Agent and Documentation Diagrams
Section titled “Software Engineer Agent and Documentation Diagrams”February 20, 2026 · @herdctl/core@5.4.0
Introduced a new built-in software engineer agent with persistent conversation state for multi-turn development workflows. The agent maintains context across sessions, making it ideal for iterative code reviews, debugging, and implementation tasks. Additionally, the documentation site now includes comprehensive Mermaid diagrams across multiple pages, visualizing architecture, data flows, and system interactions.
Code Quality Tooling
Section titled “Code Quality Tooling”February 19, 2026 · @herdctl/core@5.4.1 · herdctl@1.3.4
Added Biome for linting and formatting across all packages, replacing the previous linting setup. The new tooling provides faster, more consistent code formatting and better integration with modern development workflows. Also removed dead code identified by a knip audit, reducing bundle size and maintenance surface area.
Tool Call Visibility for Slack and Web
Section titled “Tool Call Visibility for Slack and Web”February 19, 2026 · @herdctl/slack@1.2.0 · @herdctl/web@0.2.0 · @herdctl/chat@0.3.0 · @herdctl/core@5.3.0
Slack and Web chat integrations now display tool calls and results, matching Discord’s existing functionality. When agents use tools like Bash, Read, Write, or Grep during conversations, the results appear as formatted messages (Slack) or collapsible UI components (Web) showing the tool name, input summary, execution duration, and output preview. Shared tool parsing utilities (extractToolUseBlocks, extractToolResults, getToolInputSummary, TOOL_EMOJIS) are now in @herdctl/chat for reuse across all platforms. Slack adds a configurable output block (matching Discord) with tool_results, tool_result_max_length, system_status, and errors settings.
Web Dashboard
Section titled “Web Dashboard”February 18, 2026 · herdctl@1.2.0 · @herdctl/web@0.1.0 · @herdctl/core@5.2.0
A brand-new web dashboard for monitoring and interacting with your fleet in the browser.
Start it with herdctl start --web (optionally --web-port <port>) and get real-time
fleet status via WebSocket, live agent output streaming, interactive chat with any agent,
schedule management with trigger/enable/disable controls, and job management including
cancel and fork. Supports dark, light, and system themes.
Shared Chat Infrastructure (@herdctl/chat)
Section titled “Shared Chat Infrastructure (@herdctl/chat)”February 17, 2026 · @herdctl/chat@0.2.0 · @herdctl/core@5.0.0 · @herdctl/discord@1.0.0 · @herdctl/slack@1.0.0
Introduced the new @herdctl/chat package, extracting shared session management, streaming
response handling, message splitting, DM filtering, and error handling out of core and into
a dedicated library. Discord and Slack managers now live in their respective platform packages
(@herdctl/discord and @herdctl/slack) instead of in @herdctl/core, and FleetManager
dynamically imports platform packages at runtime. This is a breaking change for anyone importing
DiscordManager or SlackManager from @herdctl/core directly.
Slack DM Support
Section titled “Slack DM Support”February 18, 2026 · @herdctl/slack@1.1.0 · @herdctl/core@5.1.0
Slack bots can now respond to direct messages, not just channel mentions. DM support
uses the same enabled/allowlist/blocklist configuration model as Discord,
giving you fine-grained control over which users can DM your agents.
Slack Integration
Section titled “Slack Integration”February 17, 2026 · @herdctl/slack@0.2.0 · @herdctl/core@4.1.0
Connect your agents to Slack channels. Users can @mention the bot to start conversations,
with replies continuing in-thread. Built on Bolt with Socket Mode, Slack agents support
per-agent connector architecture, file uploads via an injected herdctl_send_file MCP tool,
markdown-to-mrkdwn conversion, and channel-to-agent routing. Includes a full
examples/slack-chat-bot/ to get started quickly.
Verbose Logging and Colorized Output
Section titled “Verbose Logging and Colorized Output”February 17, 2026 · herdctl@1.1.0 · @herdctl/core@4.1.1
Added a --verbose / -v flag to herdctl start and the HERDCTL_LOG_LEVEL environment
variable (debug / info / warn / error). Log output in the terminal is now colorized
to match the style of herdctl logs, and internal debug messages are hidden by default,
significantly reducing noise during normal operation.
Discord Tool Result Embeds
Section titled “Discord Tool Result Embeds”February 16, 2026 · @herdctl/discord@0.2.0 · @herdctl/core@4.0.0
When an agent uses tools like Bash, Read, or Write during a Discord conversation, the results
now appear as rich embeds with the tool name, input summary, duration, and truncated output.
System status messages and errors are also surfaced. All embed types are individually
configurable via the new output block in your agent’s Discord chat config.
Cron Schedule Fix
Section titled “Cron Schedule Fix”February 11, 2026 · @herdctl/core@3.0.2
Fixed a bug where cron schedules would fire once and then never again. The scheduler was incorrectly skipping to the next future occurrence when the scheduled time arrived. Cron and interval schedules now trigger reliably on every configured occurrence.
Security Audit Agent
Section titled “Security Audit Agent”February 6—9, 2026 · @herdctl/core@3.0.1
Added path traversal protection to prevent agent names like ../../../etc/passwd from
escaping the intended state directories. Agent names are now validated against a strict
pattern at both the config schema level and file path construction level. Also added a
built-in security audit agent with sub-agent orchestration for automated daily fleet
security reviews.
Flattened Permissions Config
Section titled “Flattened Permissions Config”February 4, 2026 · herdctl@1.0.0 · @herdctl/core@3.0.0
Breaking change. The nested permissions object in agent and fleet YAML has been replaced
with flat, SDK-compatible fields: permission_mode, allowed_tools, and denied_tools at the
top level. Bash allow/deny commands now use Bash(cmd *) patterns in allowed_tools /
denied_tools instead of the old permissions.bash.allowed_commands syntax. This gives you
a 1:1 mapping to Claude Agents SDK options with no hidden transformation.
Docker Container Runtime
Section titled “Docker Container Runtime”February 3, 2026 · @herdctl/core@2.0.0
Agents can now run inside Docker containers for full isolation, consistent environments,
and resource control. Configure docker.enabled: true in your agent or fleet YAML to use
it. Supports the anthropics/claude-code image, ephemeral containers, CPU/memory limits,
volume mounts, environment variable injection, automatic git auth when GITHUB_TOKEN is
provided, and both SDK and CLI runtimes. A tiered security model restricts dangerous options
(like network, volumes, and host_config) to fleet-level config only, preventing agents
from granting themselves elevated privileges.
Also introduced runtime selection between SDK and CLI: set runtime: cli to use claude -p
invocation and preserve your Claude Max subscription tokens, or keep the default runtime: sdk
for the Claude Agent SDK path.
Docker Session Persistence Fix
Section titled “Docker Session Persistence Fix”February 3, 2026 · @herdctl/core@2.0.1
Fixed Docker-based session resumption, which was watching the wrong file path (~/.claude/...
instead of .herdctl/docker-sessions/), causing conversation continuity to break in
containerized agents. Also improved Discord notification formatting by moving agent output
to the embed description field (4096 character limit) instead of a field value (1024
character limit).
Init Template Fixes
Section titled “Init Template Fixes”January 30, 2026 · herdctl@0.4.3
Fixed herdctl init templates that were generating invalid YAML (workspace.path instead
of workspace: path) and including a hardcoded default model. Templates now produce correct
config and let the SDK choose its own default model.
System Prompt Fix
Section titled “System Prompt Fix”January 27, 2026 · herdctl@0.4.2 · @herdctl/core@1.3.1
Fixed custom system prompts being silently ignored. The SDK expects a plain string for custom
prompts, but herdctl was passing { type: 'custom', content: '...' }. System prompts defined
in your agent YAML now work correctly.
LLM-Friendly Documentation
Section titled “LLM-Friendly Documentation”January 27, 2026 · herdctl@0.4.2 · @herdctl/core@1.3.1
Added an llms.txt and llms-full.txt endpoint to herdctl.dev, plus a self-maintaining
example that uses herdctl agents to keep their own documentation up to date.
.env File Support
Section titled “.env File Support”January 27, 2026 · @herdctl/core@1.3.0
The config loader now automatically loads a .env file from the same directory as your
herdctl.yaml. System environment variables take precedence over .env values. You can
also pass a custom path via the envFile option in loadConfig(). This makes it much
easier to manage secrets like DISCORD_BOT_TOKEN without exporting shell variables.
Per-Agent Config Overrides
Section titled “Per-Agent Config Overrides”January 27, 2026 · @herdctl/core@1.3.0
When referencing an agent in your fleet config, you can now add an overrides block to
customize schedules, hooks, permissions, or any other field for that specific fleet. Overrides
are deep-merged after fleet defaults, so you only specify what you want to change.
Sessions Command
Section titled “Sessions Command”January 27, 2026 · herdctl@0.4.0 · @herdctl/core@1.2.0
New herdctl sessions command to discover and resume Claude Code sessions. When agents run
with session persistence, herdctl tracks session IDs so you can list them, filter by agent,
and resume any session with herdctl sessions resume <id>. Supports partial ID matching,
agent name lookup, JSON output, and verbose mode.
Project-Embedded Agents and Discord Streaming
Section titled “Project-Embedded Agents and Discord Streaming”January 27, 2026 · @herdctl/core@1.1.0
Agents that point at existing Claude Code projects (via the workspace field) now correctly
inherit the project’s CLAUDE.md, skills, commands, and other configuration. A new
setting_sources option lets you control this explicitly. Discord messages are now streamed
incrementally at natural paragraph breaks instead of batched at the end, providing a much
more responsive chat experience.
Discord Conversation Continuity
Section titled “Discord Conversation Continuity”January 27, 2026 · @herdctl/core@1.0.0 · @herdctl/discord@0.1.0
Discord conversations now persist across messages using Claude Agent SDK session resumption. When you chat with an agent in a Discord channel or DM, subsequent messages carry the same session ID so Claude remembers the full conversation context. Session IDs from failed jobs are not stored, preventing invalid session accumulation.
Discord Chat Integration
Section titled “Discord Chat Integration”January 27, 2026 · herdctl@0.3.0 · @herdctl/core@0.3.0 · @herdctl/discord@0.0.4
Initial Discord bot integration. Connect agents to Discord channels where users can @mention
the bot to trigger conversations. Responses are streamed back to the channel with automatic
message splitting at Discord’s 2000-character limit. The @herdctl/discord package is bundled
with the CLI, so npx herdctl start includes Discord support out of the box.
Lifecycle Hooks
Section titled “Lifecycle Hooks”January 26, 2026 · @herdctl/core@0.2.0
Added a hook system for agent job lifecycle events. Define after_run hooks in your agent
YAML to send Discord notifications, run cleanup scripts, or trigger follow-up actions
whenever an agent job completes or fails.
Schema Validation
Section titled “Schema Validation”January 26, 2026 · @herdctl/core@0.1.0
Agent and fleet configs now go through strict Zod-based schema validation. Unknown or
misplaced fields produce clear error messages instead of being silently ignored. Also
fixed the herdctl trigger command to actually execute jobs instead of just creating
metadata files.
Initial Release
Section titled “Initial Release”January 26, 2026 · herdctl@0.0.2 · @herdctl/core@0.0.2 · @herdctl/discord@0.0.2
First public release of herdctl with core fleet management, agent configuration, scheduled
jobs, the trigger command, and the @herdctl/discord package.