Skip to content

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.


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


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


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


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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).


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.