Tobs
Changelog
What changed in each Tobs release. The plugin shows the same notes after an update.
Entries describe changes at the time, including historical install versions. Install today with deepseekbot@1.4.1 · installation guide
v1.4.1
Latest28 changes
Meet Tob in a five-step first-run intro; make Bot mode your own with themes, see-through panels and a wallpaper library; keep long conversations fast with /compact and automatic Idle Compaction; find any setting from quick search; and preview images and Markdown in Memory, alongside simpler approvals and fixes for Windows Desktop, Activity and zoom.
Mobile app entries below describe the independently versioned mobile Beta; this npm release does not publish a mobile app.
- AddedThe first time you enter Bot mode, a five-step intro from Tob helps you pick a color mode, theme color, wallpaper and default model (with an Advanced option for a separate task model), shows the community links with user reviews and a note from the founder, and starts your first chat with Tob. The desktop companion now drops in from the top when Bot mode opens and stays hidden during the intro. Anonymous usage statistics now record which intro steps were seen, skipped or completed and tutorial actions, without typed text or model names (#2361).
- AddedAppearance settings give Bot mode its own light, dark or system theme with Classic Blue, Mist Purple, Forest Green or Warm Amber palettes and a Primary color for each mode, panel header and body colors with opacity and blur, per-panel overrides from a panel header's menu, and a wallpaper library of images or silent looping videos (images up to 20 MB, videos up to 100 MB) with crop, automatic switching and shuffle. The first wallpaper makes untuned panels see-through; recovery clears the current mode's panel overrides or, after confirmation, restores every default and removes wallpapers. Appearance stays on this device, leaves the DSH theme unchanged, and the targeted CLI can do the same (#2258, #2259, #2260, #2261, #2262, #2263, #2264, #2362, Settings guide).
- AddedCompact a Bot's main session on demand with
/compactin its DM composer,/compact(/压缩) in an IM DM, ordeepseekbot bot-compact <bot-id>; it reports tokens before and after and refuses while the Bot is working (#2332, Settings guide). - AddedIdle Compaction compacts a quiet Bot's main session while the model's prompt cache is still warm (at half the cache lifetime, never before 15 minutes; DeepSeek routes assume 2 hours until observed), so the next message re-reads a shorter context. It is on by default under Bot settings → Models & execution, never shows in the chat, records each run in Bot activity, and is operable with
deepseekbot idle-compaction,idle-compaction-setandidle-compaction-cache-set(#2310, CLI guide). - AddedMemory files preview as images and documents: PNG, JPEG, GIF, WebP and bounded static SVG show in current files, working changes and history with before/after comparisons, Markdown opens rendered with a source toggle, external HTTPS images load only after a click, and downloads and CLI export keep the original bytes. The mobile Memory reader follows the same rules (#2214).
- AddedOpt-in whole-window zoom on qualified macOS Desktop: set a default zoom in Bot settings, restore it with Cmd+0, and enable or disable the bundled zoom theme per Profile; panels, splitters and window controls stay aligned. A guarded Windows candidate with Ctrl+0 is included for verification, while full Windows qualification and Linux remain tracked separately (#2268, #2318, #2270, CLI guide).
- AddedRight-click the Activity button to choose which activity lights its control-rail dot, or hide it, without changing Activity filters or unread state (#2231).
- AddedA permanent Back to Harness icon sits below settings in the wide Control Rail, beside the existing top-logo exit (#2289).
- AddedIn Bot mode, ⌘, on macOS or Ctrl+, elsewhere opens Bot settings, also from the message box; change it in Bot settings → Keyboard shortcuts (#2362).
- AddedThe mobile Beta adds an Allow notifications switch per computer, plus Do Not Disturb on this phone and Mute on this computer for each DM and group; tool approvals, questions and private input still notify, and a Bot's DM replies now reach the phone (#2330, #2328).
- ChangedTool approvals offer Allow once, Always allow and Reject. Always allow applies at once and remembers that tool for this Bot in the current scope, Full Access handles ordinary requests automatically while permission changes still reach a Human, and cards show submission progress and let you recheck an unavailable status instead of calling it expired. Existing rules and access scopes keep their meaning (#2080).
- ChangedQuick search opens with Alt+K (Option+K on macOS), which the desktop app no longer swallows, while Ctrl+K and ⌘K still work where the browser delivers them. It now finds individual Bot settings rows and opens them highlighted, matches Chinese names by full pinyin or initials, and accepts English words in the Chinese interface (#2360).
- ChangedBot rows in the conversation list show one status: a spinner while working, an amber ring when the Bot needs you, a red mark when blocked and a check when finished. Avatars are rounded squares with the unread count on their corner, section headers count Bots that need you, times follow chat conventions, and the mobile Beta shows the same glyph (#2363).
- ChangedThe mobile Beta uses native iOS 26 and Android Material 3 controls: swipeable Chats tabs and a separate create button, plain centred sheet titles with system segmented controls, a native long-press message sheet with reactions, Copy and Share, Liquid Glass for the iOS sidebar and chat header with search above the bottom bar, Material 3 dialogs and menus on Android, and confirmation before unpairing or other destructive actions. Chats use the system navigation header and a top-to-bottom message list that opens at the newest message, keeps its place while history loads and sits the composer right above the keyboard (#2194, #2195, #2324, #2333, #2349, #2352, #2344).
- ChangedLong replies stream more smoothly in the Android Beta with less repeated parsing, layout and drawing; line endings in very long paragraphs can differ slightly (#2220, #2251, #2274).
- FixedApproving a workspace request in the Web or with its online CLI command now saves the folder's read/write access before the task continues; approval also upgrades a read-only Grant, and a duplicate approval cannot restore revoked access (#2080).
- FixedChat leaves room for floating companions so the latest approval buttons and replies scroll clear of them, and the create-Bot form scrolls inside its dialog on narrow screens (#2080).
- FixedFixed first-run friction from a five-persona QA pass: Tob's Bot-create approval waits for the Human instead of expiring, the card names the new Bot, the Get started tutorial counts finished steps, the mascot no longer covers the composer, previews hide Markdown markers, and messages or channel names made only of invisible characters are refused (#2315).
- FixedA turn that fails on context overflow now says so in the Channel or DM and asks you to retry with a smaller request when automatic compaction could not recover it (#2311).
- FixedWindows Desktop opens the panel workspace instead of the old Bot sidebar, imports existing panel sizes and lets blank header and rail space drag the window, and Windows browser builds no longer fail to start the Client (#2221, #2289).
- FixedActivity no longer flickers during background refresh and stays in sync across Channels through the live connection,
inbox-watchobserves it from the CLI, and muted Channels stay out of Activity message lists while read positions and pending requests remain (#2230, #2231). - FixedLocal DM and Group secret use is no longer refused when IM requests join the same turn; IM source and account revocation checks remain (#2290).
- FixedWallpapers stay visible and steady: message history fades with an alpha mask instead of a color overlay, header gaps and the macOS window-control corner no longer paint an opaque backing, and the crop holds when desktop zoom changes (#2264, #2292, #2293).
- FixedBot settings stay usable at large window zoom: navigation follows the available width, rows stack, choice menus and tooltips stay beside their controls inside the window, and keyboard focus returns after a choice (#2269).
- FixedMemory diffs keep line numbers and change markers aligned and wrap long lines by default, with a toggle for horizontal scrolling (#2213).
- FixedMobile Beta fixes: earlier messages show their saved text at once instead of replaying, Android restores full Markdown (tables included) after a fast scroll and no longer leaves long bubbles blank, Settings stays visible on iOS 26, and pairing and invitation controls are easier to tap with clearer refusals (#2283, #2284, #2188, #2107, #2186).
- DocsDocumented native Panel Plugin boundaries, independent placement and binding, Group absence for Bot-bound Panels, and VRM/Activity/speaking-first delivery followed by a shared Task Kanban; clarified slice dependencies, existing Sessions filtering and Consumer/Provider lifecycle boundaries; runtime behavior is unchanged (#2215).
- DocsThe GitHub and npm READMEs show the current Bot mode: the panel workspace with Home and Tob, Memory evolution, Groups, Schedules, the Bot Marketplace and Appearance with wallpapers, and the GitHub README lists the 1.4.0 and 1.4.1 highlights (#2369).
v1.4.0
94 changes
Tob and a simpler Home bring Bot management into conversation, a persistent panel workspace makes room for each Channel, and expanded CLI, approvals and DSH compatibility support everyday work.
Mobile app and Cloud entries below describe independently versioned development/UAT work; this npm release does not publish a mobile app or enable production Cloud services. Back up your Profile before upgrading; restoring an older binary can require the pre-upgrade backup.
- AddedHome introduces Tob, the protected local steward, with model setup, a shared chat composer, an editable greeting and suggestions that fill a draft; below it, borderless Token history and Bot activity cards form two columns or stack in narrow panels, and Bot rows reopen the existing DM without disturbing saved layouts or shortcuts (#2082, #2184).
- AddedTob discovers and uses the installed DeepSeekBot CLI to manage models, presets, Assignment concurrency and runtime preferences, create and configure Bots with personality and Memory, and create groups, invite or remove Bots, change group settings and handle pending membership requests. Existing Human authority, approval and stale-write checks remain in force; operation keys recover lost responses without duplicating resources, and invitations auto-accept by default unless the Human disabled the Profile-wide setting (#2088, CLI guide, #2089, CLI guide, #2090, CLI guide, CLI guide, CLI guide, #2087, CLI guide).
- AddedThe CLI can inspect Bot traces and directly list or run Bot, Browser and Computer tools through the same authorization and audit paths, without a model; session-only operations are explicitly refused and secret tools are omitted from trace output (#1682, #1695).
- AddedLive Host CLI commands cover Memory history, diffs, checkpoints and guarded restore; schedules and run history; Human Inbox decisions, session inspection, approval-rule revocation, Workspace Grants and private MCP lifecycle, with confirmation required for destructive operations (#1690, #1696, #1699).
- AddedThe CLI exposes Host-owned channel/group membership and policies, messaging and IM bindings, model plans and presets, Bot appearance and wake settings, Browser/Computer diagnostics and archives, Marketplace, usage/activity, releases and pairing review. Commands retain the UI permission checks and coded refusals, with explicit confirmation for installation, removal and other dangerous changes (#1697, #1698, #1700, #1701, #1702, #1703).
- AddedChoose or author an Approval Template and optionally a shared reviewer model; a tool-free Approval Review Session allows, rejects or escalates eligible operations, including masked secret-tool and Browser/Computer requests, while keeping decisions visible. Rejections enter the Human Inbox for an exact one-time override, repeated rejections pause auto approval, and active-template or reviewer-setting changes still require Human approval (#1823, #1824, #1825, #1826, #1827, #1822, #1871).
- AddedOpt-in Group send review can hold stale replies, incorporate new context, yield to observed peer answers and explicitly complete Inbox work, with two rechecks and bounded continuation or snooze. Interrupted drafts recover from fresh observations and duplicate-safe receipts across restart; changed attachments, revoked membership and uncertain side effects cannot silently produce a stale or duplicate reply (#2053, #2054, #2055, #2056).
- AddedPair a phone with a ten-minute QR/link, retain access across Host restarts and revoke it with its live connections; the mobile full-client view opens Bot mode, DMs, private input and Browser/Computer viewers using that paired identity (ADR-0199, #1652, #1654, #1687, #1845).
- AddedPaired phones can receive request and reply notifications, open the exact pending item and decide eligible tool approvals from notification actions; private input stays content-free, revocation removes notification access, and reconnect repairs registration (ADR-0202, #1655).
- AddedMobile Browser and Computer viewers support direct or trackpad input, sticky modifier keys, keyboard entry and handing control back to the Bot; local Computer takeover begins on input and expires after idle time. Qualified container viewers can use tailnet-only WebRTC, falling back to WebSocket, with CLI probes and revocation checks (#1798, #1799, #1832, #1862, #1865).
- AddedMobile profiles can manage group membership and routines, inspect usage and Memory activity across time ranges, and configure global or per-Bot models and complete Assignment presets; usage details retain reported counts when some calls are unknown (#1894, #1895, #1897, #1899, #1911, #1912, #2086).
- AddedDevelopment/UAT Cloud services add WorkOS sign-in, workspaces, durable text Channels, member/guest invitations and scoped Agent health requests, with a mobile drawer that distinguishes local Computers from Cloud and keeps drafts and navigation bound to their source. These are development capabilities, not a production Cloud or app-store launch (#2101, #2120, #2130, #2137, #2145, #2148, #2151, #2153, #2155, #2161, #2179, #2174).
- AddedShow checked Lark/Feishu parent files in their Channel request bubble, with bounded original download, retry feedback and existing Host application choices when available; Human access preserves current source authorization without waking a Bot (#1022).
- AddedKeep the installed
deepseekbotCLI independent of Host-only DSH modules so authorized media commands also start outside a running Host process (#1022). - AddedQQ can explicitly post a retained delayed result through an authorized saved group target using the shared Outbox, current app identity, final authorization and hourly quota; expired replies and uncertain sends remain separate outcomes, with real QQ qualification tracked independently (#1154).
- AddedQQ's checked consumer can forward ordinary group text for fresh receiver qualification and explicit per-conversation collection. Existing Observation and count/time harvest keep collection separate from intentional own-app posting; old events from blocked intake intervals do not qualify a newly allowed conversation. The product includes the qualified Provider as independently versioned
4.32.0-botharness.21; real application and Client acceptance remain separately tracked (#1155). - AddedStop a PersonaBot from the Web Client too. While a Bot in the DM or Group Channel is thinking or working and the composer is empty, the Send button becomes Stop; pressing it ends that Bot's current turn, the same as the mobile Stop. In a Group Channel it stops every Bot that is working there. Start typing and the button turns back into Send, so you can still steer the Bot instead (#1721).
- AddedDrag files anywhere onto a conversation to attach them; a drop target appears while files hover (#1725).
- AddedSettings → Messaging → Send messages offers Enter, Shift+Enter and ⌘/Ctrl+Enter, with keycap labels and the matching newline behavior (#1726).
- AddedNew composer slash commands:
/memoryand/sessionsin a DM, plus/profile,/settingsand/sidebarin DMs and Group Channels (#1727). - AddedYour own messages that use Markdown (code blocks, inline code, bold, lists, headings, quotes, links, tables) now render formatted, keeping the line breaks you typed (#1728).
- AddedIn Bot mode, Ctrl+K (⌘K on macOS) opens a quick switcher: type part of a PersonaBot, group chat or channel name — Chinese names included — then use the arrow keys and Enter to open it the same way its sidebar row does. An empty search lists recent conversations, hidden channels rank last, and the shortcut also works while typing in the composer (#1740).
- AddedHovering or keyboard-focusing a Bot's avatar or name in a DM or group conversation now opens a small profile card with its roles, description and current status (thinking, working on what, waiting or blocked), plus Message and Profile buttons; a Human author's card shows just the name. The card replaces the browser's plain tooltip (#1744).
- AddedThe browser tab title now shows the Human Inbox unread count, with a ● mark while something waits for your decision, for example
● (3) DeepSeek Harness(#1746). - AddedDesktop notifications: turn on Desktop notifications in Bot settings › Notifications, and while the page is in the background this browser shows a system notification when a Bot needs your approval or an answer, mentions or replies to you, or finishes replying in a DM. Clicking it opens the message (#1747).
- AddedPress
?or Ctrl+/ (⌘+/ on Mac) in Bot mode to see every keyboard shortcut; the list is also under Bot settings › Keyboard shortcuts (#1748). - AddedTool approval and question cards use compact, borderless controls with visible outcomes, expandable details and file diffs, expiry feedback and keyboard actions; single-choice questions can be answered directly while higher-risk always-allow choices keep their confirmation (#1749, #1752, #1753).
- AddedThe Human Inbox moves with
J/K, opens the source with Enter, marks an item handled withE, selects withXand snoozes withS. Selected items can be marked handled together, and selected tool approvals allowed once or rejected together. Remind me later hides an item until a chosen time; the Snoozed filter lists them and brings one back, anddeepseekbot inbox-snoozedoes the same from the CLI (#1750, #1751, #1754). - AddedIn a group Channel, right-clicking a Bot's avatar opens a menu to send it a message, @mention it in the composer, or view its profile (#1757).
- AddedThe Bot mode sidebar now shows how many unread Bot messages each DM and group has. Right-click a conversation for Mark as read or Mute, or pick Mark all as read from the sidebar's ⋯ menu; a muted conversation turns grey and stays out of the Activity unread total. Hiding or moving conversations shows a toast with Undo. Alt+↑/↓ moves to the previous or next conversation and Alt+Shift+↑/↓ jumps to the previous or next unread one.
deepseekbot channel-unreadanddeepseekbot channel-mutedo the same from the CLI (#1738, #1739, #1741, #1742, #1743). - AddedOpening a conversation with unread replies now shows a New messages divider at your last-read point, switching conversations keeps the message you were reading, long messages fold behind Show all, each grouped message shows its own time on hover, images open in an in-page preview you can step through with the arrow keys, you can react to a message with an emoji from its hover bar or, on a phone, its long-press menu, and Bots can react too by passing
react_toandreactiontochannel_send, with or without a reply in the same call (Bots see the reactions when they read the Channel, anddeepseekbot channel-reactadds yours), and Ctrl/⌘+F searches the open conversation and jumps to a match (deepseekbot channel-searchruns the same search) (#1769). - AddedWhen creating a Bot, Advanced settings → Memory location lets you keep its memory files in a folder you choose, such as another drive, instead of the default DSH data folder.
deepseekbot create --memory-location <dir>does the same from the command line (#1772). - AddedYou can now move an existing Bot's memory files to another folder, or back to the default one, from the Bot's Workspace Grants → Memory Repository row. The Bot starts a new main session in the new folder; chats and Memory history stay.
deepseekbot memory-move <id> --memory-location <dir>does the same from the command line (#1772). - AddedNavigation shortcuts can be changed: open the shortcut list (
?or Ctrl/⌘+/), choose Change next to Bot mode, quick switcher, previous/next (unread) conversation or the list itself, and press the new keys. A shortcut needs Ctrl/⌘ or Alt, cannot reuse one that is taken or reserved, and Reset brings back the default. On macOS the list shows ⌘ ⌥ ⇧ (#1775). - AddedOther plugins can now add their own panels to the desktop Bot mode layout through the
dockPanelsService. A panel either follows the active Channel or stays the same across Channels, and it appears in the Panels menu next to the built-in ones (#1791). - AddedAdded the to-do example plugin's Host part,
@botharness/todo: a shared to-do list kept in DSH storage, Bot tools (todos_list,todos_add,todos_update,todos_remove) that let a PersonaBot track things for the Human, anddeepseekbot todos/todo-*commands that read and change the list or run a tool without the model. Its To-do Dock panel follows in a later release (ADR-0203, #1792). - AddedIn the DeepSeekBot mobile app, long-press a DM message to copy its whole text, and the phone gives a light tap of feedback when you send a message, allow or deny a Tool approval, or submit an answer. Chat photos now stay cached on the phone, so they reopen offline and no longer flash an earlier photo while you scroll (#1807).
- AddedAsk a PersonaBot in chat to create another PersonaBot. It fills in the name, Bio, Tags, Avatar, Soul and Core Memory from the conversation and can place the new Bot's Memory in a folder you name. The call follows the same tool approval and saved rules as other Bot tools; when it asks you, the card previews the new Bot and its Memory folder. The new Bot appears in the sidebar with its DM, and
deepseekbot creategains--avatar-fileand--core-memory(#1858). - AddedHost-wide token usage on the Overview page can now cover the last 4 weeks and the last 12 weeks, not only today and the last 7 days;
deepseekbot overview-usage --period month|quarterreads the same ranges (#1898). - AddedBot Marketplace search and topic filters include the Bot's own
.botharness/bot.jsontags (including legacyroles) alongside GitHub topics, counting each Bot once per tag (#1907). - AddedMobile chats now show single-line Bot activity aligned with message bubbles, with consistent gaps and contextual avatars. Long-press reveals full details and an explicit action to open the related conversation, memory files or new Bot; two device-local switches in the Bot profile control posts and memory updates mirrored into its Human DM (#1919).
- AddedSettings → About in the Web Client and in the DeepSeekBot mobile app shows a build id: the short git commit and the local build time (the mobile app also shows its version and branch), so a test build can be told apart at a glance; tapping the mobile row copies it (#1923).
- AddedAdded default-on optional phone statistics at the bottom of Settings with collapsed details, with anonymous pairing, connection and first-chat results through the official PostHog React Native SDK; a first-use notice follows the Web client, and production enablement awaits public privacy copy, device and Human QA (#1935).
- AddedCustomize the composer footer’s model, Workspace, usage and optional generation-speed controls through its context menu, drag ordering or keyboard alternatives; preferences stay device-local, narrow panels keep controls readable, and hidden metrics do not fetch history (#1958).
- AddedAdd a "Model" submenu to a Bot's right-click menu in the roster: pick from the models and efforts the Bot may use, with the current choice marked; selecting one applies it as the Bot's default without opening the profile (#1959).
- AddedThe chat’s right dock gains a Bot files panel with per-Bot attachment history, including older messages. Files open through the existing attachment viewer and can be referenced through the composer. Selections survive timeline navigation and draft recovery, share the ten-file upload limit, and can be removed without deleting the file (#1960).
- AddedWeChat paired-owner conversations can be mirrored into the Bot’s local DM, with a separate option to forward local DM messages back to that account. Both switches default off and include clickable help. Mirroring reuses original content, follows content purge, and adds no second wake. Local approval, private-input and other control cards are not forwarded. Forwarding preserves the exact account boundary and stops unsent work when disabled (#1983, spec #1990).
- AddedAdded a collapsible DeepSeekBot section with Bot/persona subgroups to the DSH Session list, keeping each Bot's Orchestrator and Assignment Sessions together across execution directories and using the configured Bot icon for the outer header (#1997).
- AddedBot subgroup headers show their owning PersonaBot avatars instead of disclosure chevrons, while the whole header still toggles the group (#1997).
- AddedAdded inline
/model <text>and/effort <text>pickers to a Bot DM composer: they list the same catalog models and reasoning efforts as the Bot's right-click menu, filter by the typed text, mark the current choice, and change only this Bot’s Orchestrator at the next turn, preserving fixed or inherited Assignment settings (#2000). - AddedAnswer Hermes-style slash commands sent as a whole DM message directly in the IM chat without starting a Bot turn:
/commands,/help,/status,/model,/effort,/stopand/new, with Chinese aliases and full-width/accepted (#2005). - AddedRead-only replies are open to any admitted DM sender; model, effort, stop and fresh-session changes stay limited to admitted senders on Weixin and current management pairings with approval capability elsewhere. Commands run in order per Bot, recheck revoked authority, preserve Assignment model settings, and retain reply outcomes in the existing Outbox; group and attachment messages keep their normal path (#2005).
- AddedAdd
deepseekbot bot-new-session <Bot ID>to retire an idle Orchestrator Session through the same Host runtime as/new(#2005). - AddedAdded a Mention shortcut and icons to Channel sidebar member menus; selecting a member keeps the current draft and focuses the composer (#2009).
- AddedMobile chats can preview and save a device-local photo or solid background, with Fill/Fit, image position and background fade. Set a default in Settings or customize a DM/group; cancel and failed saves retain the saved choice (#2118).
- ChangedExisting CLI scripts that update Bots must supply
--expected-profile;bot-delete-confirmandbot-delete-retrynow require--confirm, preserving reviewed snapshots and explicit destructive confirmation (#2089). - ChangedDeepSeekBot supports DSH
>=0.2.0-rc.2 <0.3.0-0, retaining the existing minimum while adapting Owner identity, tools and foreground/background Subagent delegation to DSH 0.2.1-rc.2; development stays pinned and future 0.2.x admission does not imply runtime qualification (#2167, compatibility policy #423). - ChangedDesktop onboarding now guides model setup, creating a Bot and group through Tob, arranging panels, and clicking the Home title to close it and enter the conversation; existing approvals, histories and layouts survive migration, and new Bots start without an automatic welcome letter (#2192).
- ChangedThe desktop workspace uses an independent Channel list, Messages and Activity panels with a full-height Control Rail, draggable placement, persistent sizing, configurable gaps and shortcuts, and context menus for visibility. Settings gains cross-page search and dedicated Appearance, Messaging, Notifications and Keyboard pages; panel headers, centered empty states, light/dark surfaces, zoom-safe menus and fading scrollbars are unified, and Channel switching preserves unrelated panels and drafts (#1829, #2017, #1789, #1790, #2016, #2042, #2014).
- ChangedSessions, Memory files, Memory evolution, Schedules, Browser and Computer live inside Messages with freely nested rows and columns, per-Channel placement, proportions and visibility; reopening or resizing preserves the layout, narrow titles truncate while actions remain available, and old layouts and shortcuts migrate. Bot-only panels stay out of Groups; Channel files and the Bot Inbox open on demand from the Messages header (#2033, #2034, #2036, #2049, #2067, #2069, #2076, #2071, #2074, #2048).
- ChangedThe independently released mobile development client gains native DM and Group chats with streaming Markdown, attachments, image viewing, reactions, speech-to-text, in-chat approvals and questions, mentions and stop controls. Floating headers and composers, grouped bubbles, contextual activity and compact decided cards share the desktop design; Bot profiles expose personality, Memory, schedules, models and Workspace Grants (#1643, #1721, #1718, #1838, #1804, #1875, #1879, #1880, #1881, #1886, #1890, #1892, #1900, #1920).
- ChangedMobile Activity separates Needs you, personal updates and other unread conversations, with in-place decisions, search, filtering, handled history and swipeable tabs; list positions and loaded data survive navigation, and returning refreshes the visible page window (#1653, #1954, #2057, #2111).
- ChangedMobile Chats gains search, desktop Channel sections and unread counts, creation shortcuts and a computer drawer with connection status and per-computer appearance; settings and notifications remain directly reachable, while Android navigation adapts to pending counts and large text (#1853, #1854, #1861, #1866, #1888, #1850, #1852, #1878, #2077).
- ChangedA Bot now runs Shell and tools from other installed plugins, such as
ops_bash, under its Session's own DeepSeek Harness permission mode, with no extra approval card for each call. When DeepSeek Harness itself asks for permission, for example a Shell command that needs to leave the sandbox, the request appears as an approval card in the Bot's chat. Secret tools, editing an original attachment, Browser and Computer still ask as before (#1731). - ChangedChannel settings are easier to find: right-click a Channel in the Messages sidebar for Channel settings, My nickname and the DM's "Show what this Bot did elsewhere" toggles, or click the conversation header chip for the Profile and the same options. The ⋯ button at the top right of the conversation is gone (#1761).
- ChangedOn desktop, a message's react, reply and copy actions now float in a small toolbar over the bubble's top-right edge on hover instead of beside the bubble, so the layout no longer shifts (#1843).
- ChangedBot and Assignment prompts now say where new files belong: scratch, logs, bundles and generated results go under
<workspacePath>/.botharness/<short-task-slug>/inside the Grant unless the Human names a destination (or the system temp directory), never the Grant root, the Human's home directory or a new sibling folder, and existing project files are edited in place. Assignment terminal reports list the files created (#1957). - ChangedUpgraded the mobile app to Expo SDK 58 while preserving synchronous local settings and cache writes, and kept iOS permission translations out of Android resources so release builds pass localization checks; developers must rebuild their native development client (#2020).
- ChangedActivity Center now opens the personal Inbox directly on the page and in Dock, filling the available Panel width with cards styled like the Channel list, matching Panel insets and independently collapsible Needs you, For you and Other unread sections, plus header search across eligible results and a menu for filters, history and sorting, with inline Tool approval buttons, expandable context, retryable failures, and batch actions behind an explicit selection mode. Retired Overview navigation, state, styles and duplicate legacy UI tests are removed; open reply drafts survive read-state refreshes (#2026).
- ChangedAndroid settings use spacious rounded groups, accent headings, inset separators and clearer selected rows; their switches now use native Material 3 controls while retaining existing saved preferences (#2072).
- FixedRestored macOS Desktop window dragging from unused Control Rail space and Panel header whitespace; only the content-sized icon and title close or rearrange a Panel, with Channel identity and actions outside that handle (#2205).
- FixedMobile streaming batches draft updates, sends appended text, reuses parsed Markdown and windows measured blocks while keeping history-reading position stable; Android adds paced native text fade, improved sheet/keyboard behavior and streaming or complete-bubble preferences, with a native rebuild required for the native fade (#1803, #1808, #2028, #2183, #1873).
- FixedMobile forms and pairing stay above the keyboard, follow system language and text size, and keep navigation, titles and actions reachable; missing conversations offer a working return path, Android dialogs and sheets use consistent themed controls, and cloud navigation dismisses obsolete pairing UI (#2171, #1806, #1872, #1926, #1938, #2004, mobile contribution contract, #2021, #2083, #2106, #2186).
- FixedOn Windows, a Bot's Orchestrator now runs its Shell as
pwsh, the Shell its preset provides, instead of abashtool that ran through PowerShell;pwshcommands in a writable Workspace Grant use that Grant. Bot role prompts no longer namebashas the only Shell, so a Bot also uses a Shell that another installed plugin adds, such asops_bash(#1731). - FixedA PersonaBot that writes
@and a colleague's display name in a Group message now really mentions that colleague: the name shows as a mention badge and wakes it, even when it wakes only on mentions. Several colleagues answering the same Human request can each report to one coordinator; two Bots that keep mentioning each other still stop after one round. A report that answers a new Human task, sent in a turn that was still busy with an earlier exchange, wakes the coordinator again instead of being taken for that earlier exchange, and a colleague that an earlier unmentioned message only reached as ordinary Group delivery still wakes when it is mentioned later (#1764). - FixedProfile and Overview usage now show cache-read and cache-write tokens for PersonaBots on routes that leave a zero cache count out of a response, such as DeepSeek through OpenCode Go, instead of marking them unknown and the total partial. A bucket is filled in only when the response's total proves its value; usage recorded before this update is unchanged (#1787).
- FixedFixed the Workspace Grants dialog opened from the DM composer, which showed folders as Read-only with no way to change it since 1.3; each folder row now shows its write switch and open-folder button in the header, and newly added folders are writable by default (#1855).
- FixedA Bot DM no longer fails with "invalid channelTimeline response" when one of its messages cannot be read by the client; that message now shows as plain text and the rest of the Channel loads (#1887).
- FixedA Bot's @mention chip in the message composer, the @mention picker and Group activity rows now show the same avatar as the Bot's own messages, instead of a name-generated face when the Bot has a customised avatar (#1906).
- FixedThe Overview's token usage no longer shows "Unknown" for the whole week when some usage went unreported, for example rows kept from before an upgrade. The total now counts what was reported and is marked with +, and each day's bar shows its reported usage (#1908).
- FixedThe Linux Docker Computer now starts on Docker hosts without IPv6. Before, its desktop never answered and the Computer stayed on "Waiting for the desktop…". Taking over the Docker Computer to see and drive its desktop works again too: its picture no longer fails with "unknown field
max_image_dimension" (#1924). - FixedFixed the phone statistics switch retaining its previous visual state after a saved change by publishing loaded preference changes within the switch event (#1935).
- FixedClient startup diagnostics no longer report a lost shell when entering Bot mode replaces the native sidebar. A visible Bot mode main surface now counts as a mounted shell; actual disappearance and earlier errors still report failure (#1947).
- FixedSender permission lookups on Weixin and other platforms without a sender Role policy now report
role-policy-not-supported-for-platforminstead of a falsebinding-replaced, so a Bot no longer refuses work over an unchanged binding; disabled/replaced identities and revoked Grants are rejected before platform support is checked; connected-group sources retain their ingress Binding, while legacy group sources without that evidence require a fresh message (#1951). - FixedScrolling the Sessions panel no longer makes every row slide on the next update, and the activity chevron above the composer now points the way the panel opens (#1952).
- FixedFixed authorized WeChat paired-owner reports staying reply-only with the published IM Provider: proactive posting now qualifies against the account's exported
proactive-text-checked,proactive-receipt-checkedandproactive-fence-checkedcapabilities, matching QQ (#1955). - FixedAbout distinguishes source builds and unknown release metadata instead of presenting
0.0.0as a software release; the authenticated CLI exposes the same identity, and restart polling waits for the exact staged version (#1980). - FixedFixed an early local Browser viewer URL that could request a frame before its Bot owned a tab; first-frame waits and failures now remain distinct from a stopped Browser, with bounded requests and explicit reconnection (#2012).
- FixedFixed message file attachments in narrow panels: bubbles fit their content with left-aligned, prettier text wrapping, while file names remain visible and Open and download controls wrap inside the card (#2037).
- FixedMobile chats retain structured Bot mentions and display body-sized inline avatars and current names using each Bot's primary color. Tap a mention to open that Bot's DM; renamed or missing Bots are resolved by ID rather than display name (#2160).
- FixedAutomatically check for compatible DeepSeekBot updates when entering Bot mode, remember dismissed versions per local Profile, and expose real refresh through
release-check --force(#2173). - DocsPublished repeatable Activity, Workspace Grant, Memory and Browser verification paths with CLI correlation, source-bound evidence and explicit coverage limits (#1972, #1973, #1974, #1975, #1976).
- DocsThe GitHub README and installation guides now install
deepseekbot@1.3.1and list its highlights (#1771). - DocsDocumented one DSB software/npm release identity, immutable QA artifacts, independent mobile/dependency versions and explicit channel/retry gates; runtime enforcement remains planned (#1979, policy, ADR-0216).
v1.3.1
11 changes
Entering deepseekbot on the DSH Plugins page installs it in one step again, now on DSH 0.2.0-rc.2 only; the deepseekbot CLI can configure a Host, operate a Bot's Browser and Computer and manage token-based IM apps; the Bot Browser panel streams page changes live; and a development build of the mobile app shows the Roster and native PersonaBot DMs.
- AddedThe getting-started checklist adds "See how it works in DSH", a short walkthrough from the Bot's Sessions tab into the same session in DSH and back to the Bot DM (#1496).
- AddedAdded a development build of the DeepSeekBot mobile app that connects to the Human's Host over Tailscale HTTPS and shows the Roster of PersonaBots and Channels with live state, and recorded why it reads live state over DSH's Remote stream socket in ADR-0200 (#1650).
- AddedAdded a native PersonaBot DM to the mobile app's development build: tap a Bot in the Roster to read the DM from an on-device cache and then the Host, page back through older history, send with visible sending, sent and not-sent states (a retry never sends twice), watch the reply stream in, and resume after the app returns from the background without lost or repeated messages; replies render as selectable Markdown in system dark mode and zh/en (#1651).
- AddedThe
deepseekbotCLI can now configure what the Web UI configures, so an agent can set up and test a Host on its own:browser-access-set,computer-access-set,accessandaccess-set(full access needs--acknowledge-risk),settingsandsettings-set,workspace-createandgroup-create(#1677). - AddedThe
deepseekbotCLI can now operate a Bot's Browser and the Computer:browser-open,browser-frame(save the current picture to a file),browser-takeover,browser-stop,computer-start,computer-statusandcomputer-stop.grantsnow also works against a live Host (#1677). - AddedThe
deepseekbotCLI can now add, inspect and remove token-based IM apps (Discord, Slack, QQ, DingTalk, WeCom, Matrix), bind and unbind them to a Bot, show each binding's reception, and connect an external group conversation to a Channel:im-app-add,im-app-status,im-app-remove,im-bind,im-unbind,im-status,channel-connectandchannel-ingests. Credentials are read from stdin only and never printed (#1677). - ChangedThe Bot Browser panel in the Host web page now follows the page as it changes instead of refreshing once per second. Chrome pushes a new picture whenever the page repaints, so typing, scrolling and clicking show up in about a quarter of a second, and a page that does not change costs nothing. Runtimes that cannot stream keep the once-per-second picture (#1636).
- FixedEntering
deepseekboton the DSH Plugins page installs it in one step again; 1.3.0 first stopped to ask foragent-browserbuild approval. The Browser trial driver'sagent-browseris now an optional add-on. DeepSeekBot now declares that it needs DSH 0.2.0-rc.2, the only release its bundled Computer runtime works with, so other DSH versions get a clear refusal naming DeepSeekBot. Every release is now installed into a fresh Profile before it is published (#1672). - DocsDocumented how a paired phone keeps reaching the Host across restarts: a device gateway on the same
dsh weblistener verifies a per-device credential, forwards to the native carriers, and revokes one device at once, including its open streams; runtime behavior is unchanged (ADR-0199, #1649). - DocsThe GitHub README and installation guides now install
deepseekbot@1.3.0and list its highlights, and the npm package README states the DSH 0.2.0 minimum (#1667). - BreakingDeepSeekBot 1.3.1 needs exactly DSH 0.2.0-rc.2, the only release its bundled Computer runtime works with. DSH 0.2.0-rc.1 and the 0.2.1 alphas refuse it at installation with a message naming DeepSeekBot; upgrade DSH to 0.2.0-rc.2 first, or stay on DeepSeekBot 1.3.0 (#1672).
v1.3.0
202 changes
Bot mode moves onto one StyleX design system with a Channel settings dialog and an icon-tab Channel sidebar; the Orchestrator triages, snoozes and resolves its own Bot Inbox and groups Assignments by state; Bots can use Owner secrets through approved CLI and MCP starts, and an MCP server can be set up from one sentence and shared across Bots; messages can be multi-selected and exported as an image, text or a local diagnostic bundle; composers keep drafts and recall sent input; a Bot Primary Color colors its name, charts and heatmaps; Pixel Avatars add elves, dwarves, orcs, talking flowers and animals with a drawable Part Library; Memory can be restored to any graph commit; Local Computer runs on Windows and Linux; Lark, Slack, QQ and WeChat gain pairing review, app creation and authority controls; and DeepSeekBot now requires DSH 0.2.0 or later.
- AddedDevelopers can reuse independent QQ QA1/QA2/QA3 Apps across branches through task claims and dedicated native Profiles, and connect a selected existing native authorization through CLI over strict SSH without retyping its Secret or copying the full credential store (#1438, guide).
- AddedAfter you send, the composer clears and the input is kept on this device: press Up in an empty DM or Group composer to recall what you submitted, including failed sends, and Down to return to your draft. A send that got no answer shows Not confirmed instead of failed; it is checked against the Host by its original ID, never resent automatically, and stays recoverable after a reload (#1460, ADR-0184).
- AddedMessages can be multi-selected with Select in the message menu (right-click, or long-press on touch). An Export menu then saves the selected messages as a PNG image, copies them as conversation text, or exports a local diagnostic bundle: a zip with that Channel from the first to the last selected message (or from a single message until now) plus 30 minutes on each side, with the selected messages marked, the involved Bots' DMs, Inbox admissions and native Session events (tool calls included, from the start of any turn already running), and a merged timeline. Standard redaction hides local folders, tokens, secret fields, request headers and emails; Memory files, attachments and other Channels are never included, and nothing is uploaded (#1533, ADR-0185).
- AddedDM and Group composers retain device-local drafts across Channel switches and browser reloads, validate restored references, and expose concurrent-tab conflicts and storage failures; unuploaded file bytes are not retained (#1459, ADR-0184).
- AddedA PersonaBot's DM now shows what it did elsewhere: each post in a Group or Bot DM leaves a short linked line with an excerpt, consecutive posts in one Channel collapse into one line, and Memory updates made in a Group also appear in the DM with their place. The DM's top-right settings menu hides each kind for that Bot; nothing unread or waking is added (#1517, ADR-0182).
- AddedOpt-in work-failure alerts reuse the Bot sidebar management destination, use an RBAC-style wide two-column settings/history dialog with searchable, sortable records, test send and delivery inspection, and notify from committed failure facts without forwarding private error text or granting decision authority. Known-unsent retries are bounded; unknown sends are not replayed (#1041, Lark guide).
- AddedMemory Evolution commit diffs and uncommitted diffs have Open current file on every file row: it opens the file at that path as it is now, with the same default application and dropdown, never the version in the selected commit. A missing file is reported instead of rebuilt, with a deletion note only when that row is itself a deletion (#1462, guide).
- AddedThe current Memory file reader, ordinary chat file cards, and the Memory Repository and authorized Workspace folder rows have an Open split button: one click opens on the Host in your default application, and the arrow lists other detected applications for a one-time choice. You can set a default per file type or for folders and restore the system default; the setting stays in this browser for this Host profile and never changes the operating system's file associations. A missing or unavailable default asks you to choose instead of using the first application (#1461, guide, ADR-0178).
- AddedThe optional checked QQ Provider adds bounded transport, Gateway, native callback and receipt metadata to diagnose missing own Echo without logging bodies, credentials or raw identifiers; a reviewed SDK 1.0.4 build patch observes before decode/JSON and exposes start/end counters, including tail suppression, while author qualification, reply authority and Echo capabilities remain unchanged (#1156, Provider candidate #25, transport candidate #26).
- AddedA PersonaBot now has a Bot Primary Color: Automatic follows its Avatar's main hair color (or a fixed fallback for uploaded images), and the Avatar dialog in its Profile lets you pick a Custom color with a light/dark preview. Its name on DM and Group Channel messages, in the mention list, in the composer and on sent mentions uses that color, adjusted to stay readable on each background and theme. Exporting a Bot as a zip or sharing its Memory Repository carries the choice, so an imported copy keeps the same color. A deleted Bot keeps its last color on its old messages and in the usage list. The per-Bot usage chart and a Bot's own token charts draw in its color, with fixed shades for cached input, other input and output, and a Bot's activity heatmaps use shades of its color with empty days left neutral (#1471, #1472, #1473, #1474, #1475, #1476, ADR-0177).
- AddedAuthorized Lark DM reviewers can separately confirm exact or all-opaque tool rules, inspect the same scope and status in Web, and lose future automatic approvals when current creator authority is revoked. All-opaque requires a qualified version-2 Provider/account and its own high-risk confirmation. IM-only Bots can receive approval cards before anyone opens their Web DM. External rules never auto-approve Web-only native Session authorizations; bilingual tutorials include real sanitized workflow screenshots (#1033, Lark guide).
- AddedGroup composer workspace shortcuts reuse DM directory cards, permission badges and native modal geometry to default to all currently eligible Bots with optional subset selection, confirm their directory and existing access, and report independent per-Bot Grant creation, reuse, failure and unknown-outcome readback without granting unselected members access (#1433).
- AddedGroup behavior items support manually declared mutual exclusions with searchable selection, affected-person/source previews and current-revision checks. Settings and Host mutations refuse incompatible effective Allows, including membership changes and removal of a protecting Deny; explicit Deny still takes precedence (#1423).
- AddedThe reviewed ordinary-chat pairing path extends to Slack DMs through the existing People/Roles/Requests settings, current sender queries and checked original reply route; approval asks for a fresh question and revocation closes later intake. A three-stage local wizard and private loader reuse separate Slack QA1/QA2/QA3 slots across worktrees while preserving Lark configuration; setup never starts a receiver. The bilingual guide includes actual DM-scope and full-flow screenshots, permission purposes and reinstallation. The isolated ordinary-DM flow passed native execution/revocation/restart checks and Human feedback; Slack group and native management controls remain separate (#1415, guide).
- AddedBot DMs offer composer shortcuts for existing model and Workspace Grant settings and Window Companion show/remove; icon-labelled model and workspace-count chips sit left, compact token usage sits right and opens a read-only Orchestrator/recent Assignment usage popover with relative Session bars and a separate details button. Profile and Memory file details replace the complete Channel body without its overlaid chat header; header identity and pin chips align and retain opaque hover backgrounds. Drafts and attachments remain intact, authorization still requires confirmation, and Workspace Grant collapsibles reuse the Channel sidebar header and chevron design (#1432).
- AddedMobile Bot mode opens a full-width conversation list with one search/create/Exit header; chats use Back/name/three-line Channel menu, and icon-only navigation connects Conversations, Activity Center and existing Bot Settings. Long empty-composer hints use an ellipsis, Activity Center shows one title, search borders stay visible, and Exit reuses the chosen Bot-mode icon. Mobile sidebar display settings stay at the right inset. Returning preserves list position and conversation-isolated drafts, while Exit restores Host navigation (#1434). Physical-phone and Mobile Safari Human QA remains required.
- AddedAttached or pasted files and images can be referenced at the message caret as atomic inline filename-and-size chips with matching attachment numbers, aligned card controls, consistent compact preview cards in a single horizontal scrolling row and unchanged canonical file identity. Sent attachments keep numbers only in inline references, without duplicate corner badges. Shift+Enter preserves the new line when typing after an inline reference (#1447).
- AddedLark authorization groups can select reusable named behavior permissions. A wide Group editor separates management, behavior and members into tabs beside a compact, sidebar-style affected-person preview; its Allow/Deny cells show only checkboxes with accessible names, and its body scrolls while the title and actions remain visible. People show deduplicated current items, every group source and explicit Allow/Deny conflicts with Deny priority, alongside their primary Role and separate management capabilities (#1423). Profile schema Generation 81 requires an upgrade backup; rollback needs that backup or a compatible writer.
- AddedCompatible checked Providers can add Slack received/answered reactions from canonical Inbox and source-reply facts, without blocking messaging; muted sources are excluded. The isolated candidate has native channel/DM evidence; Human QA and published Provider qualification remain pending (#1161, guide).
- AddedLark pairing reviewers can choose an existing Role and approve or reject from a shared source-group or private-DM card, including group-only use. Current review permission and separate delegation Allow/Deny limit management Role grants; applicants must ask again after approval (#1414).
- AddedAuthorized IM requests can lead the Owner to an existing Web Chat private-input card, consume references under existing approval and return a nonsecret result to the original conversation; current source and account authority fence delayed continuation and delivery (#1385, guide).
- AddedPersonaBots in the opt-in protected Profile can consume opaque private references through one fixed MCP authenticated-status operation, using existing Web input and execution approval; ordinary isolated MCP remains available (#1384, guide).
- AddedOwner CLI supports private-account status, blank replacement cards and local revocation alongside stdin-only multi-field submission and cancellation, through the same Host authority as Web Chat (#1416, guide).
- AddedBot Schedules in the opt-in protected Profile can reuse configured private references after restart under existing execution approval. Missing configuration asks for Owner action without opening an unattended private-input card (#1383).
- AddedLark pairing settings manage continuing authorization groups and personal Allow/Deny exceptions; current permission queries show every source, explicit Deny overrides Allow, and removing membership withdraws only that group contribution while each person retains one behavior Role (#1406).
- AddedAdded Web Chat private credential replacement and local revocation per PersonaBot/account, with current-version execution checks and bounded running-use stop reports even under remembered broad approval (#1382, guide). Older binaries do not honor the new account tombstones; back up before upgrading and repair forward or restore the full pre-upgrade Profile backup.
- AddedPrivate input cards have independent pending attention and a fifteen-minute deadline; cancellation, competing submissions and restart settle safely without waking a stopped Bot. Configured references persist, while new grants require a committed card result before use (#1381, guide).
- AddedIM pairing settings use a wide People / Roles / Requests workspace with searchable, sortable tables, compact creation/change times and selected-entry details. Role creation opens separately, table and detail corners align with native inputs, and information icons reveal supporting explanations. Older records without timestamps show an unknown value (#1373).
- AddedEach allowed Lark group can explicitly accept unpaired visitors without management powers; separately collected unpaired ordinary messages supply passive context without waking the model or filling eligible request thresholds (#1376).
- AddedBot DM settings edit ordinary Lark role behavior and explicit Allow once/Reject capabilities in a separate dialog or reassign a selected paired person; permission queries read current revisions and delayed private approval decisions re-check current authority (#1375).
- AddedPersonaBots can query current paired people and roles, configured external conversations, and paired people observed in one authorized conversation through bounded read-only directories; observations explicitly remain incomplete and do not represent current group membership (#1374).
- AddedBot DM settings offer ordinary Lark roles and optional reviewed chat pairing: unpaired DMs and mentions wait without waking the model, approval asks for a new question, and revocation closes future access. The model receives trusted sender references and can query current permissions on demand; existing management pairing stays separate. Independent test Apps can be configured once and reused across worktrees (#1373, shared test App guide, ADR-0165).
- AddedAn opt-in isolated Profile lets a PersonaBot request confidential fields in Web Chat or receive Owner CLI replies, save them through native Credentials Service and consume references through a fixed CLI under existing approval. Ordinary native bash and configured MCP stdio calls run in Linux with an authorized workspace; the qualification guide describes supported boundaries and review limits (#1380).
- AddedWindow Companions offer optional, quiet text-paced babble and grab, fast-drag, throw and first-impact landing sounds, off by default for each Profile, and a damped angular spring makes drag reversals and settling continuous without adding model tools or TTS. Idle companions hide the empty status bubble and fade action controls in on hover or keyboard focus; pointer focus after dragging no longer keeps reading open. Long message bubbles follow the latest revealed text without scrollbars; scrolling upward preserves the reading position until returning to the bottom. Dismissing the final card shows waiting replies and lets later arrivals display even while the character retains keyboard focus (#1173).
- AddedThe CLI can create blank, Zip/directory and GitHub/Git PersonaBots, configure models and inspect Channel, attention and Session summaries through a running Host, retaining known partial results and offering explicit identity cleanup with Memory preserved. See the CLI guide (#1363).
- AddedThe CLI can authorize Feishu and WeChat IM applications through the existing Provider, return a phone-scannable QR, submit credentials or verification codes through stdin and poll or cancel the same authorization attempt. See the CLI guide (#1318).
- AddedThe CLI can send a DM and collect its exact committed reply, inspect receipts, answer formal questions, decide tool approvals once, read release state and create workspace grants through a running authenticated Host. See the CLI guide (#1317).
- AddedPersonaBots can use
inbox_historyto search their own admitted messages and handled self-records across Sessions, in English and Chinese, filtered by kind, Channel, cause and time; bounded history reads never change attention. Text searches require at least three characters, and ranked cursors last ten minutes or until Host restart (#1278, ADR-0154). - AddedEach Memory commit a PersonaBot makes during a turn now appears as a line in the conversation that caused it, with the commit subject, short hash and changed files; clicking it opens the commit in that Bot's Memory history. The Bot's Inbox keeps the same commit as handled history (#1277, ADR-0154).
- AddedBot settings has an IM apps section listing every app on Lark, Slack, Discord, QQ and WeChat with the Bot that uses it, and a link to DSH settings for credentials (#1263, ADR-0153).
- AddedFrom IM apps, an unbound app can be bound to a Bot, a bound app unbound after confirmation, and a Lark or WeChat app created for a chosen Bot when the Provider supports setup (#1264).
- AddedWhile a PersonaBot thinks or works, a row under the latest message shows its avatar turning into the tool it is using and the same short status as the composer; a Group shows up to two working Bots, and the Bot's reply replaces its row as it streams in. While you're at the latest message, the status above the composer fades out, and it comes back when you scroll up into history (#1271).
- AddedAdded QQ quoted-voice intake with native platform-transcript provenance, original-audio downloads and on-demand bounded SILK playback in the Channel; one maintained-runtime application passed real voice → model → original-group text reply, Human confirmation and actual Client keyboard playback (#1159, guide).
- AddedAdded a candidate QQ group file path with direct or explicit native quoted-file association, authorized Channel downloads, independent working-copy processing and checked original-group result files; one authorized application passed real quoted-CSV processing and Human result-download verification (#1158, guide).
- AddedThe QQ image candidate reuses authorized Channel previews and native model image tools, and returns selected image results through the receiving app with a durable native receipt; actual QQ/model qualification remains tracked separately (#1157, QQ guide).
- AddedQQ sources in a shared Group Channel now identify their receiving app in author labels and source details, with independent app attribution in Group Profile activity; the guide explains explicit two-app mapping and own-identity reply limits (#1156, QQ guide).
- AddedQQ conversations can sync future mentions to a chosen Group Channel or remain Inbox-only, retain accepted history when sync stops, and show bounded local reception intervals across block/allow and reconnect without claiming remote backfill (#1153, QQ connection guide).
- AddedAn official QQ Bot app can bind to a PersonaBot, admit group text @mentions into its Inbox and answer in the original group with a native acceptance receipt; the development Provider keeps passive-reply expiry and unknown send outcomes explicit (#1152, QQ connection guide).
- AddedEvery other part can be drawn as well: outfit, accessory, beard, glasses, nose, cheeks, petals and flower base each offer Draw or edit this piece, starting from the style you wear. Pixels in an appearance color stay recolorable. A drawn face part never covers the speaking mouth. Drawn parts hide where the species or headwear hides the built-in part, and Back to the built-in style restores your choice. Picking a built-in style no longer upgrades an older Avatar's recipe unless a drawn part is being taken off (#1240).
- AddedDrawn parts can be shared. An exported Bot carries the parts it wears, and importing it adds them to your Part Library marked From an imported Bot. A single part exports as a PNG that previews anywhere and imports back losslessly. The whole library exports as a zip of those PNGs. Imports merge identical parts, recompute each part's identity from its content, and refuse malformed or oversized files with a message. The library can be filtered by origin (#1215).
- AddedThe part editor gains line and rectangle (hold Shift for straight angles and squares), a tone gradient with 4×4 or 2×2 dithering, noise with an amount and Re-roll, an eyedropper (or Alt-click / long-press), and a Shade pencil that makes cells lighter or darker once per stroke. Every tool mirrors and is one undo step. Results stay appearance colors at a tone, so the part still recolors. On touch, a two-finger tap undoes, a three-finger tap redoes, and an Offset cursor with a Hold to draw button keeps your finger off the pixel (#1216).
- AddedEvery hair piece can have its own color: bangs, back hair and a new single strand (ahoge, curl or double) join the side hair colors, and each follows the hair color until you pick one. Headpiece now offers built-in cat, bunny and horse ears, little horns, a halo and new little wings, worn together with any accessory; the base tucks behind the hair and the far side hides when the head turns. Saved Avatars that wear these as accessories look the same until you edit them, when they move into the headpiece slot (#1217).
- AddedPixel art from other tools can become a part: Import part files also takes a plain PNG of a part's size (32×32, 32×16, or a whole-number scale). You see its size and color count first, choose how many colors to keep (at most 32, nearest color, no dithering), and its pixels arrive as fixed colors that Replace color turns into appearance colors and tones. A built-in headpiece opens as a flattened starting canvas, and a part saved from someone else's part records its parent and keeps the original author's name. The library filter adds Based on another part and From an imported image (#1219).
- AddedPixel Avatars can be animals: cat, dog, fox, rabbit and bear each get a muzzle, an animal nose and their own ears, with suggested fur colors (skin color is the fur color, and any color still works). Fur pattern adds tabby, spots, patches or colorpoint in fur tones that follow recoloring, and you can draw your own pattern. Ear headpieces and ear accessories are kept but hidden on an animal, with a note (#1218).
- AddedHair pieces can be drawn too: open bangs, left or right side hair or back hair and start from the style you wear, flattened to pixels. Reshape it with the same tools, save it to the Part Library and wear it in that slot. The drawn hair is shaded and recolored like built-in hair, turns with the head and hides under helmets, hoods and on flowers. Back to the built-in style restores your original choice (#1238).
- AddedYou can draw your own headpiece for a pixel Avatar: pencil, eraser, fill, mirroring across the face, a front layer over the hair and a back layer behind it, undo and redo, and a 1× preview on the real Avatar. Colors can follow the Avatar's hair, skin, eye or outfit color in five tones, or be fixed. Saved parts go into a Part Library in your Profile and can be worn by any PersonaBot. The worn copy turns and speaks with the Window Companion and travels with an exported Bot, and editing a library part saves a new part without changing Avatars that already wear the old one (#1211).
- AddedPixel Avatars can be an elf, dwarf, orc or talking flower. Beards always leave the speaking mouth visible. Armor, robe, tunic and cloak outfits are available, and a helmet or hood hides the hair underneath. Flowers have bead eyes, five petal styles and a stem or pot. Choices a species or headwear doesn't show stay saved, with a note, and return when switched back (#1212, #1213).
- AddedA new PersonaBot starts with a random face from every species, part and outfit, based on its name. Existing PersonaBots keep their current face (#1214).
- AddedBind app can create a Lark/Feishu app or start a WeChat QR pairing through a compatible Provider setup capability, then bind its authenticated identity without sending credentials through BotHarness; older Providers retain the IM settings path. Existing WeChat accounts are preserved rather than replaced by inline setup. The Lark setup checklist includes original-message read permission needed for protected replies (#1111).
- AddedExternal coding agents can create PersonaBots without clicking:
deepseekbot createcovers blank, bundle (directory or zip), and GitHub sources against any DSH_HOME, printing machine-readable JSON (bot id, DM channel, data directory, step statuses, next actions) to stdout; names are labels so repeats mint new bots, and secrets travel only via environment or stdin. See the bot CLI guide (#1304, ADR-0156). - AddedThe same CLI now manages models headlessly:
model-presetslists profile presets,model-preset-createmints one from explicit routes,model-preset-applyputs it on a Bot, andmodel-planshows the active plan with deferred readiness; routes are shape- plus provider-existence-checked offline while key validity stays Host-side. See the bot CLI guide (#1310, ADR-0157). - AddedThe same CLI now covers Bot lifecycle and human naming:
pause/resume,updatefor name, description, and roles,human-name-setfor the Human display name, andchannel-human-name-setfor the per-channel Human nickname, all offline with coded errors. See the bot CLI guide (#1312). - AddedThe same CLI now reads channels, manages grants and schedules, and lists pairings:
channelsandchannel-messagesfor history, grant list/revoke/write-set, schedule list/create/update/delete/history/run-now/preview, andpairingsfor IM pairing status; grant creation stays Host-side. See the bot CLI guide (#1313). - AddedThe same CLI now configures secrets without clicking:
secret-putreads the value from stdin only and line-edits it into$DSH_HOME/.credentials.yamlwith backup plus re-read validation,secret-listreports names without values, andsecret-unsetdeletes the entry. See the bot CLI guide (#1314, ADR-0158). - AddedLive CLI verbs will ride the DSH HTTP unary carrier with per-invocation token-to-cookie login and never touch the operational database directly; bridge and gateway error codes pass through. See ADR-0159 (#1315).
- AddedThe same CLI is now self-discoverable:
searchfinds commands by words against the dispatched verb table, and--compactcondenses stdout JSON to one line for agents. See the bot CLI guide (#1316). - AddedThe same CLI now reads and writes Bot Memory headlessly:
memory-snapshot,memory-file,memory-history, andmemory-diffread the memory store, andmemory-savewrites one file and commits it with compare-and-swap heads and idempotent edit ids; conflicts and bad shas fail coded. See the bot CLI guide (#1311). - AddedThe local Bot Browser now offers human takeover like the Computer viewer: a live Host-served view with click, scroll, and keyboard entry (small screens default to trackpad mode), and an ask-permission handoff where the bot mints a single-use link with instructions, waits for Done or Could-not-finish, verifies the page state, and resumes. Typed secrets stay in the live view and never reach chat or logs; every handoff leaves an audit trail with its session recording (#1322, ADR-0163).
- AddedFresh
deepseekbotinstalls now ship the Browser and Computer bundles with Core, Client and the qualified IM Provider, so new Profiles browse and use a computer with no extra installs; IM accounts start disconnected until app credentials are added, and per-Bot Browser/Computer Access stays off until enabled. Existing Profiles gain the new defaults on update; remove a formerly separate Browser or Computer Bundle entry first, keeping its stored data (#1328, ADR-0160). - AddedA compatible Provider can list reachable Lark, Slack and Discord groups and post without a saved target; the app's picker, rolling-hour limit and existing Outbox retain blocks, final authorization and unknown outcomes. Older Providers show an update hint while saved targets remain available; the qualified Provider
.20is published onnextwith its exact archive verified (#1115). - AddedAdded a red dot on the Channel header's ··· menu and its Channel settings row when an enabled External connector is unavailable, and Channel settings now opens on that section (#1518).
- AddedMemory evolution can restore Memory to any Git graph commit from inside that commit's block, after saving any uncommitted files as a backup commit; any commit can be given a version name, stored as a Git tag, and Memory evolution can switch to a list of named versions; the section header gains Evolution, Versions and Branches tabs; the restore adds a new commit, the Memory file list refreshes right away, and the recovery list moves to the gear menu as Restore from an automatic backup (#1558).
- AddedPersonaBots can now archive and restore their finished Assignments, search their Assignment list by purpose, key or latest report, and page through it, so a long-running Bot keeps a small, relevant view of its work. The default Assignment concurrency limit rises from 3 to 8 (#1561).
- AddedA PersonaBot can now snooze Bot Inbox items it cannot act on yet with
inbox_snooze. They leave its open list and come back, waking it with its note, at the chosen time or as soon as something new arrives in the same conversation. The Bot Inbox view shows them as Snoozed (#1561). - AddedAdded Delete Bot to the sidebar Channel menu (right-click, or long-press on Android) and the Channel header's ··· menu, and every sidebar menu row now has an icon (#1564).
- AddedAdded reusable Discord QA1/QA2/QA3 setup that asks only for a hidden Bot Token after an agent prepares test metadata, with a manual fallback and safe status output preserving the machine-local Lark/Slack registry (#1123, setup guide).
- AddedBot settings › General › Show Bot sessions in the session list controls whether Bot Orchestrator and Assignment sessions appear in DeepSeek Harness's own session list. It is on by default; turn it off to hide them (#1567).
- AddedLocal Computer now works on Windows and Linux as well as macOS: the first check installs the matching pinned driver, and a Linux server without a display gets a private virtual desktop, and one that already runs Xvfb (for example for the Bot Browser) shares that display and gets a window manager so clicks and typing work. The Computer card shows a download progress bar, and installs missing desktop packages with one click (with progress) when DSH has administrator rights, or shows a copyable command and checks again on its own once you run it. The Bot Browser offers the same one-click install for missing Linux system libraries (#1632).
- ChangedA Bot can now ask for a secret in an ordinary Profile, without Docker or a special setup: the value is stored in DSH's credential store for that Bot, the conversation and the model only see a reference, and Agent file tools and Shell commands that target the credential store are refused. A Bot can then call an HTTP API with those secrets through the Host, which sends the request to the address the Owner entered and masks the secrets in the reply. The Docker-isolated Profile remains available as an opt-in (#1562, ADR-0189).
- ChangedA Bot can run a command-line tool that reads its credential from an environment variable, using a secret you entered on a card. The program is started without a shell and with a clean environment, the secret is masked in the output the Bot sees, and every such run needs its own approval that cannot be saved as a rule. (#1572, ADR-0191)
- ChangedRemoved the opt-in Docker-protected Profile for secret input (
privateInputExecution, its container Shell and container MCP servers). Secret input, HTTP and command-line use of secrets, replacement, revocation and the Owner CLI are unchanged and need no Docker. A Profile that still sets the option starts as an ordinary Profile and logs a warning. (#1585, ADR-0192) - ChangedTurning on full access for a Bot now also applies to its own chat: the Bot no longer asks before each command or gets blocked outside its workspace while the switch is on, and returns to the confined mode when it is turned off. You can narrow it to new Assignments only, and a Bot that already had full access on keeps that narrower scope. The switch carries a red warning, because content other people send in a Group or IM could then steer the Bot into acting. Running a command-line tool with a secret still asks every time. (#1588, ADR-0193)
- ChangedA Bot can connect an MCP server that reads its credential from the environment, using a secret you entered on a card, and then use that server's tools. Every start needs its own approval that cannot be saved as a rule; the server stops when you ask the Bot to disconnect it, revoke the secret, or restart. (#1571, ADR-0195)
- ChangedWhen a Bot asks to connect an MCP server with a secret, you can now choose to remember it: it is then reconnected whenever that Bot's chat starts, without asking again. Remembered servers are listed under Secrets in the Bot's settings, where you can remove them. (#1606, ADR-0196)
- ChangedAn MCP server you chose to remember now appears in every Bot's settings. Turn its switch on for another Bot and that Bot gets the server's tools without you entering the secret again; removing it in any Bot's settings removes it for all. (#1613, ADR-0198)
- ChangedAn approval card in a Bot's DM now links to that Bot's full access switch, so you can stop per-command approvals from where they interrupt you. Full access stays off until you turn it on, with its warning. (#1624)
- ChangedThe card for starting an MCP server now says that the server can add its own instructions to the Bot's system prompt and that its tool descriptions and results can influence the Bot, so connect only a server you trust. (#1620)
- ChangedAsking a Bot in one sentence to set up an MCP server now works: it asks for the credential with a card straight away and connects the server, instead of asking you to paste the key into the chat or looking through configuration files. (#1611)
- ChangedA Bot's question card no longer holds the Bot: after 45 seconds without an answer the Bot goes on with other messages, and the card can still be answered later. PersonaBots now run on a product preset that turns on DSH's timed questions. Tool approvals still wait for a decision (#1038, ADR-0187).
- ChangedA Bot's secret-input card now also appears in the Channel the request came from, including a Group. Only the Owner can fill it, no value is shown in the Channel, and only the requesting Bot receives the references (#1542).
- ChangedBefore the first tool approval card of a task, a Bot now says in the conversation what it is about to do and what it needs; the Host returns the call once if the Bot has not spoken yet (#1541).
- ChangedA Bot working on a Group request now asks in that Group: tool approval cards, question cards and folder-access requests appear in the Channel the task came from instead of always in the Bot's DM. Secret input stays in the DM (#1536, ADR-0186).
- ChangedA Group Channel's composer footer shows one workspace count, the distinct workspaces its member Bots can use together, instead of each Bot's own count; a DM still shows its Bot's count (#1515).
- ChangedOnboarding is now a getting-started checklist opened from a progress ring in the Bot-mode sidebar row (beside the exit button on mobile), so it takes no vertical space. It covers choosing a model and sending the first message, then letting the Bot remember you, connecting a chat app, setting a daily task and summoning the Window Companion, each with a direct action and a check read from that feature's own data. The interface walkthrough starts from the checklist and ends by showing how to leave Bot mode, and a quiet "Try it" chip marks the Bot-mode row until you first enter it (#1496, ADR-0180).
- ChangedIn a DM or Group Channel, the avatar beside a message group stays at the bottom edge of the timeline while a group taller than the view scrolls past, so you can always see who is speaking (#1491).
- ChangedChannel footers show the full effective model name without provider or inheritance labels; mobile layouts keep only the model selector, while desktop workspace and token controls remain available (#1479).
- ChangedThe onboarding tutorial is now a floating multi-step driver.js walkthrough of the interface — the welcome letter, conversation list, Activity Center, Bot settings, conversation header, message box, Channel sidebar and Window Companion — instead of a permanent bar at the top of Bot mode; it starts on the first Bot-mode entry, closing pauses, the guide offers Skip tutorial, and Bot settings → General restarts it, with completed Profiles seeing no onboarding bar (#1295, #1301, ADR-0155).
- ChangedThe preset welcome message now reads as a first-person letter from the Bot, with its banner, avatar, name and tags and the suggestion questions kept as reply options; the timeline labels that message with the Bot's name instead of "System" (#1301).
- ChangedThe Memory commit view's header now shows just the short hash and commit message, and creating a branch from a past memory moved to a right-click menu on that commit in the Memory evolution graph (#1288).
- ChangedWhen a PersonaBot messages another Bot because of a Group or a Bot DM, the "sent a direct message" line, now showing both Bots' avatars and names, appears in that conversation instead of the sender's private DM, and the sender's Bot Inbox keeps a handled record of it; Bots replying to each other inside their Bot DM no longer add a line to the Human DM. These lines no longer count as unread, get read receipts or replace the Channel preview (#1276, ADR-0154).
- ChangedBot settings open in their own window from the gear in the Bot panel, with a sidebar of General, Models & execution, Messaging, Computer, Browser, Window companions, Data & privacy, Advanced and About instead of one long page among other plugins' settings; Bot settings in DSH settings switches straight to it, and the telemetry notice and Window Companion menu open their own section (#1260, #1261, ADR-0153).
- ChangedIn a narrow window, Bot settings shows its sections in a dropdown at the top instead of a side rail (#1262).
- ChangedWindow Companions stay smoother while several Bots work and type at once. Companions now share one animation frame and measure before they write, and an avatar no longer rebuilds its figure each time it switches between thinking and working. In a five-Bot test with real replies, frames longer than 50 ms dropped by about 70% (#1167).
- ChangedUnder Recently updated, ungrouped Channels in the sidebar now sort by their latest message, so a Channel with a new message rises to the top of its group of rows. Opening a Channel no longer moves it to the top on its own (#1530).
- ChangedA PersonaBot no longer treats every message as handled just because a turn finished. Items that reached it stay open until it resolves them, it sees its unresolved conversations at the start of each turn, and it can review them with
inbox_listand clear many at once withinbox_resolve. The Bot Inbox view shows these items as Open (#1561). - ChangedThe Bot Inbox in the Channel sidebar now lists items that need attention first, then snoozed items ordered by when they return, then a folded Done group. Each row shows the Bot's resolution note, or for a snoozed item its return time and note. The tab badge counts only items that need attention and hides at zero. The Sessions tab now shows idle Assignments in its Idle group by default (#1561).
- ChangedA PersonaBot that leaves Bot Inbox items open after a turn is woken again to triage them: act, resolve, snooze or ignore each one. It stops once a round makes no progress and starts again only when something new opens. When an Assignment reports completed, the PersonaBot checks the result against what it asked for and sends it back if it falls short (#1561).
- ChangedThe Sessions tab now groups Assignments as Needs input, Working, Idle and Resolved. Needs input covers a pending tool approval, an error, or a report that waits on you, is blocked or failed. Resolved holds archived and stopped Assignments and is folded by default. Each idle or resolved row has an Archive or Unarchive button, and the Working heading shows how many Assignments run against the limit. The Orchestrator row no longer shows an Idle tag, and while a triage turn runs it reads “Triaging n open”. Assignment lifecycle items in the Bot Inbox now show as from the Assignment instead of System (#1561).
- ChangedWindow Companions now speak through one compact bubble. A reply plays one or two sentences at a time instead of stacking up to three cards. Hover to pause and read the whole message, and a counter shows how many more are queued. Tool approvals and questions show one request at a time with compact buttons; working directory, raw input and option notes fold under Details. The activity line above the avatar is gone, because the avatar already shows what the Bot is doing; a disconnected companion is dimmed instead. The bubble now has a rounded outline with a tail pointing at the avatar, pops in for each new message and shows a typing caret, and question options are numbered rows. The avatar turns its face toward the way it walks, and stops to face you while it speaks (#1576).
- ChangedEach Bot request carries about 5k fewer input tokens. A Bot without an IM connection no longer lists the 15 external IM tools or their instructions, and they appear on the next turn after the Bot is connected. The native subagent tools that a Bot could not call are gone; Bots keep delegating through bot_subagent. The reminder tool no longer repeats rules already in the Bot's instructions (#1583).
- ChangedBot settings now follows the compact look of the Channel sidebar. Every section uses the same rows: a title, one line of description and one control. Choices open as a small menu instead of a browser select box, and changes apply as soon as you make them. Messaging shows one platform at a time without the table or revision number, the Assignment limit and companion retention use a stepper, your default name saves when you press Enter or leave the field, and IM apps explains what to do when no app exists yet. Channel settings shares the same dialog frame (#1591).
- ChangedForm and confirmation dialogs now share one layout. Each field shows its label above and its hint or error below, every form ends with Cancel and one main action, Enter submits, and destructive confirmations use a red button. This covers creating and renaming Bots, channels and sections, schedules, IM app, identity and connector setup, profile editing, nicknames, member wake policy, Bot deletion, zip import and export, history purge and diagnostics. Dialogs that only report a result show a single button. Group management in Channel settings is now two rows, and the group name saves when you press Enter or leave the field (#1600).
- ChangedLarger dialogs now share the same layout as forms: one title, consistent spacing and type, and their actions in a single footer row with any side action on the left. This covers the model editor, the workspace folder browser, avatar and primary colour, IM pairing, approval and permission groups, behaviour permissions, role and exception editors, the Bot Marketplace, profile backup, memory backups, the assignment limit, external source details, IM authorization, group workspace grants, the DM composer's model and workspace panels, hidden channels and group invitations. Role, permission-exception and group-deletion dialogs submit with Enter, and deleting a permission group uses a red button. Dialogs now come in three widths: 440, 760 and 1060 pixels (#1601).
- ChangedThe Channel sidebar, its Sessions, Work, Bot Inbox and Memory tabs, the conversation header, the composer context bar, the mobile Bot panel and conversation header, the desktop window companion, and the Computer and Browser settings now take their spacing, type, radius, size and colour from one set of design tokens. They look as before, with small alignments to the shared scale: a few gaps and paddings move by 2px, small labels go from 11px to 12px, focus rings use the accent colour, and disabled buttons are dimmed (#1602).
- ChangedThe token usage chip under the composer now shows just the number, such as "169.5K", without "Partially known" or "tokens". The chip's hover label and the usage panel it opens still give the full wording (#1640).
- ChangedBot mode now uses a smaller, stricter visual scale. Text comes in three sizes (12, 13 and 14px) at two weights, so headings that were 15–24px or bold become 14px medium; corners follow the DSH radius scale, so most controls and cards round a little more; and cards, chips and code blocks that already have their own fill lose their outline, while separators inside a surface use the lighter divider colour. Elsewhere the change is mostly internal: every plugin stylesheet, including the Computer and Browser settings, reads its spacing, type, radius, edges and colour from the shared design tokens, a few gaps and paddings move by up to 2px, and unused legacy styles and per-feature token tables are gone (#1603).
- FixedQQ voice attachments use the same audio card as message attachments, with keyboard playback and seeking; download still saves the original voice file, while playback conversion remains explicit (#1156).
- FixedThe maintained QQ Provider retains native mention names and IDs so Channel messages use the existing external mention chips, with the native ID in hover details; original source text and App ownership remain unchanged (#1156).
- FixedA Bot no longer answers a message from another Channel in the Channel its current turn started in: when a turn carries messages from several Channels, the Bot must name the target Channel for each reply (#1527).
- FixedIn the English UI, tool-approval requests and decisions, their replies and the sidebar preview of a Bot DM holding an approval now show English text instead of fixed Chinese (#1293).
- FixedMemory and Workspace folders under a symlinked parent directory, such as macOS
/tmpor a linked home folder, no longer deny every Bot file tool call as outside the authorized workspace; a folder that is itself a symlink is still refused (#1292). - FixedAX Go launches stage the reviewed adapter patch inside each isolated CLI and reference it relatively, fixing Windows
ERR_PNPM_PATCH_NOT_FOUNDwhen source and home are on different drives; model credentials and native request handling retain their existing ownership (#1409, AX guide). - FixedDeepSeekBot screens no longer lose all their styling at random while DSH's own UI stays styled: reloading or updating another plugin could remove DeepSeekBot's stylesheets (#1528).
- FixedAny number of DeepSeekBot tabs on the same DSH address, up to the browser's limit for DSH's own connection, now stay responsive: the Window Companion feed also travels on DSH's shared live connection (#1501).
- FixedTwo browser tabs of DeepSeekBot on the same DSH address now both load and keep responding: Channel, roster and Activity updates travel on DSH's shared live connection instead of holding a browser connection each. A third tab can still stall all of them until the Window Companion stream moves as well (#1490).
- FixedAfter a Human DM turn is cut off (for example by a Host restart), a Bot woken next from another Channel no longer posts that DM's answer there; the request stays in its DM. A Human DM that a Host stop interrupted before the Bot did anything is now rerun automatically when the Host starts; a turn that failed on its own still waits for a manual retry (#1520).
- FixedOn a narrow or mobile window, the activity dots in a Channel list row now sit right before the message time instead of floating in the middle of the row (#1513).
- FixedA completed Assignment report no longer keeps the neutral marker on its Bot's avatar once the Orchestrator has handled it; the report stays listed in the Inbox (#1489).
- FixedThe status row above the composer no longer stays visible for an idle Bot just because a completed Assignment report is waiting in the Inbox; the report keeps its neutral marker on the avatar and in the Inbox (#1489).
- FixedA Bot no longer stays stuck on "Thinking" after its turn has ended when DSH records more Session events afterwards, such as a
/compactcheckpoint (#1489). - FixedBot-mode Web documents share selected Channel, roster and Activity SSE within each page, leaving ordinary API requests responsive when two pages use the same HTTP/1 Host. Late Activity consumers retain stale status and HTTP recovery during reconnect; purge baselines and independent consumer cleanup are preserved (#1451).
- FixedRestored QQ group Channel mappings retain bounded retries while apps become ready after Host restart, so the first new mention reaches its mapped Channel as well as its Inbox (#1156).
- FixedFixed checked QQ self mentions in full-reception events while keeping ordinary messages and Bot authors excluded; the candidate Provider retains current Lark pairing capabilities and does not claim own Echo qualification (#1156).
- FixedSeveral DM messages sent while a Bot is busy no longer make it run a separate turn for each one after they were already delivered together into the running turn (#1481).
- FixedClarified that Orchestrator answers, including short acknowledgments and image descriptions, must be delivered through the Channel reply Tool rather than private Session text, while preserving intentional silence and external reply routing (#1449).
- FixedPublic private-input Session evidence retains native RC1 rejected and unavailable approval outcomes while excluding decision reasons and unknown values (#1386).
- FixedThe reusable Lark QA App setup wizard prints links for manual navigation and reduces Windows prompt delays by caching defaults, avoiding terminal subprocesses, and saving each stage atomically while preserving other Apps (#1385).
- FixedLark tool-approval cards now show settled execution or rejection without stale action buttons by using shared updates in the qualified Provider (#1406).
- FixedChat bubbles use equal insets, and private-input, question, approval, workspace-grant and failure-repair cards align the space above their actions with the bottom inset (#1382).
- FixedWindow Companions blink at independently staggered phases and idle intervals per Bot, so matching avatars no longer blink in unison (#1367).
- FixedWindow Companions use a flatter full speech opening, preserving the half-open mouth, saved expression, portraits and speaking rhythm (#1241).
- FixedWindow Companion bubbles update their origin together with the character during dragging, keyboard movement and reduced-motion release, without waiting for another animation frame (#1248).
- FixedReading a Window Companion bubble with the keyboard or resizing the window no longer scrolls the outer stage and leaves the character above the floor; the bubble itself still scrolls (#1173).
- FixedWindow Companions keep falling after a fast throw clips the character outside the visible content, and delayed frames no longer slow gravity into an apparent midair pause. Releasing immediately ends the drag, so a late pointer move cannot grab the character again; the release click remains suppressed. Visibility checks follow the fixed presentation area, while hidden pages and offscreen areas still pause animation (#1173).
- FixedOpening a Bot DM by Channel ID, including the first Bot-mode entry, now shows that PersonaBot's Channel sidebar and shares its collapse/expansion preferences with Bot navigation; stale conversation metadata no longer selects another Channel's entries (#1361).
- FixedClicking the tutorial mask advances to the next step instead of dismissing the tour; the final step uses the Done action. The footer keeps Skip as text and uses labeled icons for Previous, Next and Done so the controls and progress do not wrap (#1356).
- FixedProfile token-usage cards keep missing-provider-usage explanations behind an info icon beside the title, available on hover, keyboard focus or click instead of taking up space in the card (#1355).
- FixedCLI secret edits validate actual YAML on disk and restore the original file on failure; empty inline refs and multiline values work, and secret-bearing arguments fail without echoing their values (#1347).
- FixedApp sidebar conversation titles show the latest message time and leave it blank when there are no messages. Bot Channel header chips no longer show PersonaBot tags; tags remain in the Profile (#1354).
- FixedBot Browser's first background tab can open before Chrome's startup window is ready, and local Web users see download progress while it installs; the extra development refresh connection now requires
?botharness-dev-reload=1(#1339). - FixedThe working row no longer reappears as "Thinking" right under a PersonaBot's own reply while it finishes the turn, and the jump-to-latest pill says "1 new message" for a single message (#1284).
- FixedA quiescent Assignment waiting for tool approval releases its running slot, so other work can start; an accepted decision waits for a slot before the original call continues, and the approval card distinguishes both waits. Waiting Sessions are bounded separately, roots with descendants retain their slots, and revocation or restart never replays the call (#1037).
- FixedIn Bot Settings, Computer Import… stays closed when the directory holds no archives, and a Combobox with nothing to pick renders no floating box, so an empty dropdown no longer reads as a broken select (#1309).
- FixedOn narrow screens, message bubbles are no longer squeezed by the always-visible reply and copy buttons; those actions move into the long-press message menu, while desktop hover and right-click behavior is unchanged (#1346).
- FixedA question card that a Bot left open while it went on with other work now survives a Host restart. The card stays answerable in its DM or Group and in the Human Inbox, and the answer resumes the Bot's own conversation where it asked. Before, the card silently expired after a restart. A card also stays answerable when DSH releases the Bot's agent between tasks (#1038).
- FixedA Channel's sidebar preview and time now follow new messages even when that Channel is not open, including messages you send from another window. Each new message updates only that Channel's row, so the sidebar no longer waits for an unrelated refresh (#1530).
- FixedA PersonaBot can now resolve or snooze the message that woke it in the same turn:
inbox_resolveandinbox_snoozeaccept the Message ID shown in the turn header, andinbox_listincludes the items the current turn is handling. Before, the Bot could not find those items, so every message cost an extra triage turn (#1561). - FixedWhen the Orchestrator gets an Assignment report through
wait_for_assignment, that report and its lifecycle notices now belong to the current turn. The Orchestrator can accept and resolve them there, and no separate report turn follows (#1561). - FixedWhen a Bot's Orchestrator Session is archived in DeepSeek Harness while the Bot is replying, the Bot now replays the message on a new Orchestrator Session instead of failing, as long as the interrupted turn had not acted yet (#1567).
- FixedFixed a PersonaBot going silent after its Orchestrator Session was archived in DeepSeek Harness; the Bot now starts a new Orchestrator Session on its next message (#1567).
- FixedThe DM token usage panel's "Current Orchestrator Session" row now shows the Session the Bot actually resumes, so it follows a replacement Orchestrator Session instead of an archived one. Usage from replaced Orchestrator Sessions stays in the Bot's totals (#1567).
- FixedWhen a Bot moves to a new Orchestrator Session, BotHarness now releases the Agent it held for the replaced Session instead of keeping it in memory until the Bot stops (#1567).
- FixedAfter a Bot replaces an archived Orchestrator Session, the Sessions list pins the Session the Bot actually resumes, and an answer to a question asked in the archived Session is refused instead of starting a turn DeepSeek Harness rejects (#1567).
- FixedA Bot no longer stays stuck on "thinking" or "working" when a Session log stops in the middle of a turn, for example after a crash or when the turn ends without a closing event. The state now settles to idle once DeepSeek Harness reports that the Session is not running (#1567).
- FixedA Bot tidying its own inbox or archiving finished Assignments no longer asks the Human for tool approval, so the next message to that Bot is not held behind an unanswered card (#1575).
- FixedThe onboarding tour now describes the Channel sidebar tabs and points to Channel settings in the ··· menu, and its Activity Center and Bot settings steps show the buttons they highlight. The getting-started progress ring in the Bot mode row now appears only on hover, like the Activity Center and settings buttons (#1584).
- FixedDiscord app binding and empty-conversation hints now describe server-channel and public-thread @mentions instead of promising unsupported DMs, with a recorded packaged binding/reply qualification (#1123, qualification record).
- FixedFixed a PersonaBot with dangerous full access being unable to use its Bot Browser or the Computer. Full access turns approval cards off, and these two tools still waited for one, so every call was refused. A Session that has full access now gets that authorization without a card, and running a program with your secrets (
secret_cli,secret_mcp_connect) no longer asks on every call either. Full access now means no approval cards; the Bot can still ask you a question or for a secret. Bots in the default mode still see the approval cards (#1622). - FixedThe Human Inbox button in the sidebar's Bot-mode row now sits in one group with the tutorial progress ring and the settings gear, without a border. Before, it floated above the row, covered the tutorial ring and hid the gear when pointed at (#1630).
- FixedThe DSH Plugins page no longer offers Browser, Computer and Core as separate Bundles to turn on. They already run inside DeepSeekBot, and turning one on added a second copy with default settings: Browser lost its headless setting and failed on servers without a display, and Core was declared twice. A Profile that already turned one on keeps working; the extra entry is skipped at startup (#1633).
- FixedFixed the banner in the channel header's profile popover stopping short of the card's right edge in the desktop app, and the onboarding welcome letter's Bot name overlapping its banner and its 4:1 banner cropping 3:1 uploads (#1634).
- FixedWhen the Bot Browser cannot start because the OS blocks Chrome's sandbox, the panel no longer tells you to enable headless, which was already on and could not help. On Linux it now names the likely cause, AppArmor restricting user namespaces on Ubuntu 23.10 and later, and Details includes an AppArmor profile for the Bot Browser's own Chrome that allows them (#1635).
- FixedTyping @ straight after Chinese text or punctuation such as 。 now opens the Bot picker, so a message can mention several Bots without a space before each @ (#1637).
- FixedA Bot question with more than three items or a long description now appears as a card in the Channel and the Window Companion, instead of only in DSH's own question view, so you no longer leave Bot mode to answer it (#1641).
- FixedA tool call whose input is longer than 16 KB now shows an approval card instead of being refused, and a typed answer on a question card is no longer limited to 2,000 characters. Bot-mode cards now accept what DSH itself accepts (#1648).
- DocsDocumented a qualified 2-core, 4 GB source deployment with strict SSH, CLI installation, tailnet HTTPS, real QQ replies before and after Host restart, an original-group A/B image with private identity redacted, and an actual native binding clip with bilingual subtitles; the complete tutorial film remains pending (#1438, walkthrough, Profile installer).
- DocsThe npm package page names DeepSeekBot (DSB), lists QQ among IM identities, notes that it is not DS Bot (
ds-bot), and links to deepseekbot.app (#1548). - DocsBoth READMEs are shorter and user-focused: the video and pixel avatars come first, installation and the Bot Marketplace link to the website, features sit in one table (including Slack, Discord, Lark / Feishu, QQ and WeChat, and computer and browser use), and a new section compares DeepSeekBot (short name DSB) with the separate DS Bot (npm
ds-bot) project (#1516). - DocsUpdated the bilingual GitHub README for released 1.2.0 and 1.2.1 highlights, installation compatibility and the current app-binding path; removed the outdated unreleased preview (#1464).
- DocsPublic installation instructions use the qualified stable exact package version, with synchronized bilingual README/guide checks and release-age recovery guidance instead of implying bare names or
@latestalways install the newest release (#1456). - DocsDeepSeekBot GitHub Release announcements start with version-specific official website and Chinese/English installation links; short links preserve GitHub, release-version and entry-point attribution without changing analytics consent (#1445).
- DocsAdded an isolated Linux private-input qualification guide covering tailnet Web access, exclusive IM receiver handoff, cross-platform path metadata and explicit non-root workspace permissions (#1386, guide). The
ask_secrettool now tells Web and scheduled callers to omit the IM-only source selector when reusing configured accounts. - DocsAdded the Product Hunt launch badge to the Chinese and English READMEs (#1427).
- DocsAdded bilingual human contributor guides and community entry points for questions, ideas, examples and focused issues or PRs, including copyable, illustrative bug-report examples with redaction guidance; runtime behavior is unchanged (contributor guide, #1396, #1403).
- DocsClarified DeepSeekBot’s project identity, canonical installation links and distinction from DS Bot in both READMEs, with published npm versus current-source Browser/Computer scope (#1399).
- DocsDocumented how a PersonaBot's Memory commits and its own BotHarness-tool actions will be kept as Channel Notices in the conversation that caused them and as searchable Bot Inbox history that never wakes it; runtime behavior is unchanged (ADR-0154, #1272).
- DocsDocumented five-companion foreground frame, concurrent-output and stream-recovery/Client-reload measurements, ten-cycle heap observations, same-version/Profile walking studies with separate main-renderer stage observations and an explicitly interrupted current-version comparison, separate Windows GPU-process counters and actual browser-process restart checks, with repeatable protocols, confirmed scoped budgets and explicit remaining qualification; no SVG-specific GPU attribution or overall performance acceptance is claimed (report, #1167).
- BreakingBot DM trace lines are new Channel Notices. A binary from before this change shows them as empty Bot messages, so revert the Host and Client together (#1517).
- BreakingDeepSeekBot now needs DSH 0.2.0 or later, previews included; DSH 0.1.7 Hosts refuse the new version at installation and should stay on DeepSeekBot 1.2.x or upgrade DSH first (#1511).
- BreakingWork-failure alert settings and delivery metadata add Profile schema Generation 83. Back up before upgrading; rollback requires a compatible writer or the pre-upgrade backup (#1041).
- BreakingLark-saved tool rules add Profile schema Generation 82 with external creator provenance. Back up before upgrading; rollback requires a compatible writer or the pre-upgrade backup (#1033).
- BreakingGroup behavior items can declare mutual exclusions. Current writers reject incompatible effective Allows; stop policy editing before reverting to a writer that ignores these declarations (#1423).
- BreakingA Bot's existing sender-restriction switch now also covers Slack DMs. Review or pair Slack applicants before their next request; before reverting to an older binary, disable the affected Slack Binding because it cannot enforce this gate (#1415).
- BreakingPairing-review cards add Profile schema Generation 80. Back up before upgrading; rollback requires a compatible writer or the pre-upgrade backup (#1414).
- BreakingExternal authorization groups add Profile schema Generation 79. Back up before upgrading; rollback requires a compatible writer or the pre-upgrade backup (#1406).
- BreakingOrdinary Lark roles add Profile schema Generation 78. Back up before upgrading; rollback requires a compatible writer or restoration of the pre-upgrade backup (#1373).
- BreakingInbox history adds Profile schema Generation 77 with a rebuildable FTS5 trigram index. Back up before upgrading; reopening an upgraded Profile requires a compatible binary or restoration of the pre-upgrade backup (#1278).
- BreakingMemory commit records add Profile schema Generation 76 (a per-Bot commit cursor and a one-record-per-commit index). Back up before upgrading; reopening an upgraded Profile requires a compatible binary or restoration of the pre-upgrade backup (#1277).
- BreakingBot Self-Records add Profile schema Generation 75, which rebuilds the Source Event and Inbox Admission tables to accept the new kinds. Back up before upgrading; reopening an upgraded Profile requires a compatible binary or restoration of the pre-upgrade backup (#1276).
- BreakingThe Part Library adds Profile schema Generation 73. Back up before upgrading; reopening an upgraded Profile requires a compatible binary or restoration of the pre-upgrade backup (#1211).
- BreakingQQ reception intervals add Profile schema Generation 74 and reuse the existing receive boundary; back up before upgrading and repair forward after upgrade (#1153).
- BreakingPer-app proactive post limits add Profile schema Generation 89. Back up before upgrading; rollback requires a compatible writer or the pre-upgrade backup. Earlier experimental #1115 generation 75/77/84/87/88 Profiles must remain isolated because their migration histories differ (#1115).
v1.2.1
5 changes
Install DeepSeekBot on compatible DSH 0.1.7 and 0.2 Hosts, with clearer Group identities and attachment cards; the unfinished 1.3 data migrations are not included.
- AddedGroups without a custom avatar show up to four static member faces in the sidebar, rail and pinned grid (#1270).
- ChangedAudio and file attachments share a compact card layout, with inline audio controls and a direct file download action (#1290).
- ChangedYour own message header places the name on the right and the timestamp on its left (#1298).
- ChangedGroup Channel headers use the same avatar as the sidebar, without individual Bot Window Companion Pin buttons; Bot DM companion controls and Channel pinning remain available (#1439).
- FixedCore and product-managed IM Provider compatibility declarations now use a DSH minimum of
>=0.1.7-0, including previews, without an exact-version lock or future-version ceiling. A repeatable packaged installation matrix checks published DSH versions from 0.1.7-alpha.1 through 0.2.1-alpha.2 without compatibility exemptions; future versions are allowed by the declaration, not yet runtime-qualified (#1425).
v1.2.0
81 changes
Bots can be pinned as pixel Window Companions that play their replies, binding one app is enough to send and receive on Lark, Slack, Discord and WeChat, group Channels can connect external conversations, a Bot can be exported and imported as a zip, the Bot Profile gets a banner, tags and bio while its settings move to the Channel sidebar, the Bot Marketplace shows profile cards, Bot mode can install Git, and first-time Bot mode walks you through one real conversation.
- AddedThe welcome offers today's AI news with source links only when native search credentials and the Bot's search Tool are configured; otherwise it offers a general planning request, and the news request asks for truthful search-error reporting (#1174).
- AddedPixel Avatars can be a goblin, with pointed ears through the hair, small tusks and suggested green skin, and left and right side hair can each have their own style and color; the goblin keeps head turns and speaking mouths in Window Companions, random covers both species, and existing Avatars render unchanged (#1210, ADR-0148).
- AddedThe welcome now offers a daily evening check-in at 21:00 with the browser time zone and current DM shown before selection; missing time zones are confirmed first, and existing model setup retains the complete request for explicit sending (#1228).
- AddedThe Bot Marketplace now shows each Bot's Profile banner: a thumbnail on every row and a full banner at the top of the detail view, with a neutral placeholder when a Bot has none. The Marketplace Worker reads
bannerfrom.botharness/bot.json; a pixel scene is drawn locally, and an uploaded image loads from the repository at the indexed commit (#1093). - AddedThe welcome’s ten-minute reminder now shows the browser time zone and requests a single delivery to the current DM; the Host computes relative deadlines without rounding them early, and the Bot receives concise one-time scheduling and destination guidance (#1208).
- AddedEvery Bot now has a Profile banner at the top of its Profile and its popover. New Bots get a pixel scene picked from their name, which a rename doesn't change; existing Bots get one at the next start. Change banner picks one of ten scenes, rerolls the picture, uploads an image cropped to 3:1, or resets to the generated scene.
.botharness/bot.jsonrecords the banner,.botharness/banner.pngis always written, and Bot Zip export, import and Git import keep it (#1092). - AddedAfter a first real Bot-mode reply, an optional Bind app action opens the existing platform picker and website tutorials; Not now leaves completion intact, and only canonical binding and reception facts determine the result (#1203).
- AddedAfter the first real Bot-mode reply, an optional welcome action opens existing Memory files and changes or sends a freeform preference as a normal DM request; skipping stays quiet and only actual files and changes show what was saved (#1200).
- AddedBot settings can export and inspect one verified complete
.botharness-backup, including retained custom/deleted Memory, current attachments, model templates and independent plans, and the canonical purge checkpoint; the installed local command restores only into a new stopped environment (#886, guide). - AddedWindow Companion bubbles follow the displayed pixel bust's head through tilt, stretch and movement, retain an origin connector when cards move to avoid overlap or viewport edges, and keep text upright; resize updates the clamped character and bubble origin together, while image and unsupported-rig fallbacks use their visible box top (#1177).
- AddedWeChat identity enablement and native typing can inherit independent global defaults or retain Bot-specific overrides; existing choices are preserved on upgrade, and unsupported group/Thread settings stay hidden (#912, guide).
- AddedIsolated AX launches expose bounded, allowlisted real Client startup/runtime evidence and explicit shell readiness for coding agents, retaining first failures across document retries (#1184, guide).
- AddedEnded Groups expose retained history and separate Source Event Content Purge, showing all shared placements, Admissions, managed files and dependent effects before confirmation. Exclusive current/legacy attachments are removed, shared files survive, interrupted cleanup resumes on restart, and issued replies retain honest outcomes; restore checkpoints and an asynchronous purge barrier support future Profile Backup (#897, QA guide).
- AddedFirst Bot-mode entry prepares one DeepSeek Bot, a real DM and reusable welcome choices for capabilities, news and scheduled requests; model setup saves separately from explicit question sending and preserves unsent requests, supports a Profile default with Bot inheritance, and completes only after a real reply; the welcome creation action has a distinct theme-accented button, question cards hide Session provenance and short headers outside Developer mode and retain drafts when toggled, optional custom answers use compact input hints, and the compact welcome and question options reuse joined sidebar cards with distinct message surfaces, direct single selection and checkbox multi-selection, and onboarding/global setup share the existing model and reasoning controls with the Bot editor. Tutorial progress survives restart, and safe manual retry keeps the original Human message (#1175, ADR-0147).
- AddedPinned Window Companions show formal pending questions alongside approvals and let Humans answer joined choice rows, checkbox multi-selection or compact custom text without switching conversations; drafts survive incoming messages and Developer-mode toggles, and only the existing question owner can accept an answer and resume its waiting Session (#1179).
- AddedPinned Window Companions show persistent Tool Approval requests and let Humans decide without opening the Bot's DM, using the existing approval owner, explicit rule confirmation, stale-state checks and keyboard focus recovery after delayed request removal (#1178).
- AddedSupported pixel Window Companions open and close their mouths as committed message text appears, pause at punctuation, and restore the saved face after completion, cancellation or backgrounding; roster portraits and image fallbacks keep their existing identity (#1143).
- AddedWindow Companions follow archive and deletion independently of Bot mode, preserve image/unknown-version snapshot fallbacks, and support keyboard reading and controls. Keyboard menus receive focus after placement and return it to the invoking control when dismissed. Motion preference changes settle immediately; offscreen presentation and obsolete animations stop without restarting old messages (#1142).
- AddedWindow Companions recover a bounded set of unplayed eligible replies after a brief same-Host disconnect, retry temporarily closed streams, preserve reading progress and pause presentation while the page is hidden. Reopening a source starts with future replies; first selection and Client/Host restart never replay history (#1141).
- AddedWindow Companions can independently play Group replies and choose own-DM, shared-Channel or all-Bot-Channel scope, including Bot–Bot DMs with both participants named. Cards identify the original Channel and respect its existing read access; changing sources or scope removes only newly ineligible cards, preserves eligible reading and queued messages, and starts newly enabled sources with future committed Bot text, without marking messages read (#1140).
- AddedHuman can delete a PersonaBot from Profile while retaining Memory by default, explicitly erase a verified exclusive repository, open its Host folder, and inspect/retry incomplete cleanup; deletion retains history and terminally fences the original identity (#896).
- AddedLark, Slack and Discord groups now show their real names instead of IDs: in External identities, in connected external conversations, on messages in the Channel, and in what the Bot reads, where the ID is still given next to the name. Discord groups read as
Server #channel. Lark sender names are looked up with a longer timeout and cached per app, and a failed lookup falls back to the ID. Existing entries pick up the name with their next message (#1151, External connectors guide). - AddedA group Channel can connect an external conversation: Connect an external conversation under External connectors in the group's Channel sidebar picks a bound app and one of its known groups, and every message from that group then appears in the Channel. Member Bots get the messages as context only by default and wake only when someone @s them; the connection's wake setting can switch to a batch or every message, and a member's own wake policy in the Channel still wins. Each row shows its state and last message, with a switch to pause and Delete to stop new messages while keeping the ones already here (#1145, ADR-0143, External connectors guide).
- AddedSlack DMs to a bound app now reach the Bot's Inbox and get answered in the DM without opening a thread, and Discord apps appear in Bind app again. The development IM provider moves to a dsh-im build with Slack DM intake, Discord checked delivery and checked Slack/Discord reply mentions (#1125, External identities guide).
- AddedBots can be selected as transparent pixel Window Companions from sidebar menus or individual Channel-header buttons. Each keeps its own Activity, new Human–Bot DM bubbles, drag physics, reading list and walking preferences across Harness pages; shared Profile settings control stacked layers and bounded card retention, and restart restores preferences without replaying old messages. Reduced motion disables drop and pose effects; walking pause does not pause Bot execution (#1138, #1139).
- AddedOne Bot can bind several apps of the same platform, such as two Lark apps: each app's DMs and @mentions reach the same Inbox and replies go out through the app that received them. Bind app lists every connected app and greys out the ones a Bot already uses, naming that Bot, and External identities lists the Bot's apps grouped by platform. A shared reply from a Bot with two apps in the same group refuses with a clear message (#1110, External identities guide).
- AddedAn app's conversation list in Edit identity is now manageable: conversations sort into Waiting, Active, Muted and Blocked. Mute keeps messages in the Inbox without waking the Bot, Rules edits one group's collection and wake, and Block (confirmed) cancels unsent replies and keeps the conversation out even after restart or unbinding and rebinding; Allow again starts fresh with no backfill. A new New conversations setting chooses Admit automatically or Ask me first; waiting conversations keep only names and counts, never message text. At most 20 new conversations per app join automatically each hour and 500 stay active; beyond that they wait with the reason shown (#1109, External identities guide).
- AddedSlack, Discord and personal WeChat bind in one step too: after Bind app, DMs to a Slack or Discord app and @mentions of it in channels go straight to the Bot's Inbox with replies in the same thread; personal WeChat admits only DMs from the person who scanned it, never other contacts or groups. The bind dialog shows the real receiving state on every platform, and recorded group conversations follow the platform's global group intake and wake defaults (#1112, External identities guide).
- AddedBinding a Lark app is now enough to send and receive: Bind identity under External identities becomes Bind app, and once bound, DMs to the app and @mentions of it in groups go straight to this Bot’s Inbox, with the Bot replying in place. No saved delivery target, conversation authorization or reception switch is needed. The first message records its conversation; the app row shows a conversation count and opens a read-only conversation list, and the bind dialog shows the real receiving state.
/pairstill goes to pairing, existing authorizations behave as before, and every bound app upgrades to admitting new conversations automatically (#1108, ADR-0142, External identities guide). - AddedA reviewed Lark operator can receive tool approvals in a named management DM and use Allow once or Reject; callbacks recheck the actual actor and exact native call, while the Profile distinguishes delivery, accepted decision and native execution result. Known-unsent retries are bounded; uncertain delivery and old cards after restart cannot authorize execution (#1029, ADR-0141).
- AddedAX isolated Profiles can reuse a machine-local OpenCode Go credential and native default model after one hidden-input setup, preserving independent Profile configuration; the qualified DSH 0.2.0 RC1 adapter supplies the actual Session header required for real Go replies (#1079, guide).
- AddedAdded a source-preview native WeChat typing candidate tied to authorized owner-DM processing, with bounded renewal, lifecycle cleanup and an identity preference; native client visibility and packaged-product qualification remain tracked on #911 (guide, ADR-0145).
- AddedQualified personal WeChat owner-DM text reports use the canonical external-only Outbox with current-authorization fences and actionable private-context refusal. Profile exposes explicit posting; client acknowledgement and any genuine native server message ID remain distinct, without claiming delivery/read receipts (#910, guide).
- AddedPersonal WeChat paired-owner messages can use Channel connectors for explicit local DM/Group placement or Inbox-only reception, sharing one Source Event with independent member wake policy. Shared readers need their own identity and Grant to reply; native WeChat groups and threads remain unsupported (#909).
- AddedAdded a candidate Lark image preview in original Channel bubbles, preserving native text/image order, visible-only loading, enlargement and current Channel/source authorization; forwards the image opt-in through the account consumer boundary; stopping reception retains acquired images while unbind/revocation refuses the affected path (#1021, guide).
- AddedPersonaBots can read native WeChat quoted text or resolve a missing quote from currently authorized retained private-conversation records; source details distinguish native, retained and unavailable content, and bounded local context reads support cursor continuation without claiming remote WeChat history (#908, guide).
- AddedAdded Lark private
/pairrequests with authenticated Web review, explicit Bot-scoped capabilities and revocation that survives restart; pairing messages stay outside the Bot Inbox and Memory, while IM decision controls follow separately (#1027, guide, ADR-0136). - AddedAdded a checked personal WeChat video path with on-demand source playback/download and own-identity native video replies, preserving private routing and current authorization; browser playback and tool access remain distinct from video-model understanding (#907, guide).
- AddedAdded original WeChat voice download and explicit playback preparation for supported SILK audio, with a separately saved WAV working copy, bounded decoding and current-source authorization; speech recognition and native voice replies remain separate capabilities (#906, guide).
- AddedDiscord now has independent external-platform defaults for group intake, ordinary wake thresholds and inherited identity availability. Profile custom choices remain independent; restoring inheritance uses the current Discord defaults. Existing Lark/Slack history and overrides are preserved on upgrade. (#1016)
- AddedA Bot can now be handed to someone else as a zip. Create PersonaBot opens a submenu with Start empty, Import from GitHub and Import from zip. The Bot profile's Share and export section packs the Bot's Memory files, uncommitted changes included, with
.botharness/bot.jsonand its avatar, after a reminder to check for secrets; Git history, Sessions, IM bindings and credentials stay out. Importing a zip shows the third-party content notice and creates a fresh Bot with one initial commit and the name, roles and avatar from the zip; unsafe paths, damaged archives and zips over 100 MB are refused and leave nothing behind (#1062, ADR-0135). - AddedExporting a Bot zip now lets you pick files. The export window lists every Memory file and folder, all ticked by default, with expand, collapse, Select all and Select none; unticked files stay out of the zip, while
.botharness/bot.jsonand the avatar are always included (#1063). - AddedExporting a Bot zip can now Include Git history, carrying every branch, tag and commit; it is offered only when every file is ticked. Importing such a zip keeps those branches, tags and history and checks out the exported branch, with no remote and none of the source machine's Git config (#1064).
- AddedAdded the Export and import a Bot guide: what a Bot zip holds, choosing files and Git history on export, importing a zip, and the safety reminders before sharing and importing; the Share a Bot and Memory files guides link to it (#1065).
- AddedBot mode now checks the Host's Git before you create a Bot. When Git is missing, cannot run (such as the macOS Command Line Tools stub) or is older than 2.28, the roster explains why, links to the new Git section of the installation guide, and turns off creating and importing Bots until Check again finds a usable Git; Bot creation that still meets an unusable Git reports it as missing Git instead of a generic memory error (#1096, ADR-0140).
- AddedBot mode can now install Git for you: when the Host's Git is unusable, Install Git downloads a pinned portable Git into the DeepSeek Harness data folder (from
media.botharness.ai, falling back to GitHub), verifies its SHA-256 and starts using it without a restart or admin rights; the Orchestrator's Shell uses the same Git. A usable system Git still wins on each start (#1097, Git section). - AddedImporting a Bot from an SSH address now falls back to HTTPS: when cloning
git@host:owner/repoorssh://git@host/owner/repofails, the Host retries once with the matching HTTPS address, says it switched, and the Bot syncs over HTTPS from then on; if HTTPS fails too, you see the original SSH error. DeepSeekBot settings gain a Git row showing the Git version in use and whether it is system or managed (#1098, Git section). - AddedLark feedback candidates can show native
GLANCEafter durable Inbox receipt andDONEafter the corresponding externally accepted reply, through an optional checked Provider; feedback waits for first-connection readiness and permission denials are definite failures. Guarded QA verified DM and group reaction rendering, group reply states, receipt-only mute, Provider reconnect, a new reply after live Host restart and Web theme captures; exact blocked-source arrival and Web lifecycle reliability remain unqualified (#1040, guide). - ChangedBot Marketplace cards now read like a profile card: the Profile banner sits on top, the Bot's avatar overlaps its lower edge with the name, repository and Install beside it, then a two-line bio and one line of tags, stars and update date. The detail view opens with the same banner and avatar, and the modal shows two cards per row (#1232).
- ChangedBind app links directly to the website connection tutorials for Lark / Feishu, Slack and WeChat, with a more-platforms overview; the standalone Lark setup card is removed so platform instructions stay in one place (#822).
- ChangedNew conversations is now a platform default too: Lark, Slack and Discord each have a New conversations choice in their global IM defaults (Admit automatically unless changed), and every bound app follows it until you pick a value for that app. Apps already set to Ask me first keep it (#1134, External identities guide).
- ChangedThe External connectors entry no longer offers Add connector or Authorize a conversation while syncing is redesigned around connecting any app's conversation; it lists existing syncs and keeps Save a send target (advanced) for apps that can't post to conversations directly. A conversation row shows where it is synced, and its actions (Mute, Rules, Block) sit on their own row with a tooltip each. The Lark setup guide shrinks to three steps (connect the app, bind it, send a test message), and the Lark, Slack and WeChat guides are rewritten around Bind app (#1113, Lark guide, External connectors guide).
- ChangedA Bot's model and wake policy moved from its Profile to two new entries in the DM's Channel sidebar, Model and Wake policy. Each shows its current value in the collapsed header, lists one row per setting, and opens a dialog to edit; both can be reordered or hidden like other entries. The Model dialog now lists a Main model and a Task model, each picked from a searchable list with its reasoning effort; models can be set without any preset, a saved preset can still fill the dialog, and Save as preset keeps the current settings for reuse. Attention policy is now called Wake policy (#1084, Model guide, Wake policy guide).
- ChangedA Bot's IM settings moved from its Profile to two new entries in the DM's Channel sidebar. External identities lists each bound identity as a row with its availability and an on/off switch, plus Bind identity, the Lark setup guide, IM administrator pairing and Lark approval notifications. External connectors lists one row per connector with its state and an on/off switch, plus Add connector and conversation authorization. Clicking a row opens a dialog to edit it, with the same options as before. Channel connectors are now called External connectors. The SOUL.md and MEMORY.md standing limits became one row under Memory files that opens a dialog. The moved forms now use the shared dropdowns, inputs and checkboxes (#1085, External identities guide, External connectors guide).
- ChangedA local group's member wake settings and external connectors moved from the group Profile to two new entries in its Channel sidebar, Wake policy and External connectors, between Members and Group management. Wake policy shows one card per member Bot with its rule in this group, any external platform whose rule differs, and a Channel override tag when set for this group; clicking a card opens the same dialog as before. External connectors lists the group's connectors and connected external conversations as rows that open their edit dialogs. Both entries can be reordered or hidden, and the group Profile now shows only the group's name, avatar and message activity (#1086, Wake policy guide, External connectors guide).
- ChangedThe Bot Profile view now shows only who the Bot is and its activity. A new header has a banner area, the avatar, name, Tags and Bio, with Share, Edit profile and a ⋯ menu at the top right. Edit profile changes the name, Tags (up to 8, 32 characters each) and Bio (up to 160 characters) together; clicking the avatar opens the avatar editor. Share exports the Bot zip and is also on the Bot's right-click menu in the sidebar; Delete Bot moved to the ⋯ menu. Role badges are now called Tags and the description Bio.
.botharness/bot.jsonwritestagsandbio, and Bio changes sync like a rename; files and zips that still userolesare read as Tags, and zip import keeps Tags and Bio. The Bot Marketplace API returnstagsandbio, falling back torolesand the GitHub description (#1087, Share a Bot guide, Export and import guide). - ChangedThe Profile's Token usage card is shorter: it switches between Daily total and By model and offers 7 / 30 / 90 days / All, with a custom range in the ⋯ menu. The role filter, model/provider filter, cache-ratio section and execution details are gone; hover a bar for the cached, uncached input and output split. The separate Totals card is removed, and a saved pin for it is dropped quietly (#1088, Settings guide).
- ChangedThe event activity and Memory commit heatmaps in the Bot Profile now fill the card's width, newest week on the right, and load older weeks as you scroll left, back to the day the Bot was created; the popover versions fill the popover without scrolling. The per-reason event list moved into each day's tooltip (#1089).
- ChangedInterface text now calls you "you" and Bots "Bot" everywhere: "Human", "PersonaBot", "Source Event" and "Attention" no longer appear in Chinese or English labels, the purge tombstone reads
Content purged · you · {time}, and the connector section is always "External connectors". A test fails if those internal terms return (#1090). - FixedOn an explicitly configured native RC2 timed-question Profile, a DM question card stays answerable after its foreground deadline while the same Bot handles other messages; a late answer shows submitted until the original native Session admits it. Production pins and blocking RC1 questions remain unchanged (#1220).
- FixedBot onboarding no longer pauses another window's tutorial when an observing window leaves or sets a model; completed onboarding can be explicitly replayed, and saving a Bot-specific model or restoring inheritance immediately refreshes the open model card (#1175).
- FixedBind app keeps apps owned by another Bot visible with an explicit owner label, adds tutorial jump arrows and Add new app beside the App label and in every dropdown state, and restores the dialog after IM setup with automatic refresh and a tooltip refresh icon for retry (#1176, External identities guide).
- Fixednpm release preparation now names the changed source paths when a clean-checkout check refuses publication, with bounded diagnostics that preserve unreviewed files (#877).
- FixedUnpinning a Window Companion clears its stale Activity indicator; a successfully loaded Bot roster also clears a deleted Bot's restored selection, while network failures preserve the Human's pin preferences (#1138).
- FixedWindow Companions lean behind the grab point when dragged left or right and settle against the window content edge without a floor gap (#1138).
- FixedBots now read IM mentions as names instead of platform placeholders: Lark
@_user_1and Slack<@U…>reach the model as@Name(or@idwhen the platform gave no name), and each external message lists its sender and mentioned people with their platform IDs. A Bot can @ the sender or anyone mentioned in that message by writing<@ID>anywhere in itsbridge_replytext, on Lark, Slack and Discord (Slack and Discord ping through the IM provider's checked mentions, or fall back to@Nametext on an older provider); any other id or mention tag is sent as plain text (#1126). - FixedBind app no longer hides apps the IM plugin can't serve yet. A Discord app whose plugin lacks checked sending now shows greyed out with update the IM plugin to bind this app, instead of silently missing from the list (#1123).
- FixedBind app no longer lists apps already bound to the same Bot; they are already shown under External identities (#1127).
- FixedThe Model dialog no longer offers routes that cannot run: once a real turn fails because a provider has no API key or an invalid one, that provider's models are listed last as needs an API key or API key invalid and cannot be picked or saved, until DSH credentials, settings or adapters change. A Bot without a Model Plan now starts the dialog on DSH's default model instead of the first catalog entry (#1124).
- FixedShared Channel messages now show the external sender’s retained name, including existing Discord history; bubbles render retained native @ names as chips using the Lark Inbox renderer, while original text and IDs stay intact and unavailable names keep the literal fallback (#1061).
- DocsQualified native RC2 timed questions in an isolated real-model experiment: conversation can continue before a correlated late answer, while the existing Web question card still expires and production permission/capacity gates remain blocked (#1220, report).
- DocsDocumented an AX browser qualification loop that separates exact-origin permission evidence, Host transport, navigation refusals and screenshot/input timeouts, including measured retries on Human-authorized local ports (#1225).
- DocsDocumented the accepted pixel Avatar extension: Avatar Species on one rig (fantasy, animal and flower bases), separately colored hair pieces, a through-hair headpiece slot, and Human-drawn Custom Parts in a Profile Part Library that travel with exported PersonaBots and move as PNGs; runtime behavior is unchanged (#1135, ADR-0148, handoff).
- DocsDocumented the pinned native Human-wait qualification and the follow-up requirement to keep group conversation available during pending questions/permissions: independent Assignment approvals leave the Orchestrator available, while its own approval/question still blocks unrelated model processing; production continuation remains gated (#1036, experiment, #1220, #1038).
- DocsDocumented the accepted in-window transparent pixel Window Companion design: local companion selection, three Bot-output visibility scopes, independent playback controls and future-only bounded message consumption; runtime behavior is unchanged (#1132, spec #1135, ADR-0143).
- DocsDocumented native Windows candidate installation and approval verification, including physical AppData paths, isolated Profile package-manager pins, actual Shell exit evidence and process timestamp guards, in the DSH debugging playbook. The bilingual Lark guide records real Human Allow once/Reject qualification on exact candidate sources; this documentation update does not change runtime behavior (#1029).
- DocsDocumented development-source Discord shared Channel qualification for one bound member with Message Content OFF, including original-thread model replies, overlap deduplication and pause/restart/restoration evidence (#1054, verification, 中文验证).
- BreakingProfile recovery adds schema Generation 72; repair forward after upgrade. A restored environment preserves identity and history while requiring explicit target-local model authorization and fresh activation; it never resumes old Sessions or Outbox work (#886, guide).
- BreakingContent Purge adds Profile schema Generation 70 and a required independent Purge Ledger; retain that ledger when restoring operational snapshots and repair forward after upgrade. Checkpoint v2 includes managed-file selectors and imports existing v1 text checkpoints; accepted purges cannot be undone by rolling back code or the operational database (#897).
- BreakingBot onboarding adds Profile schema Generation 71. Back up before upgrading; reopening an upgraded Profile requires a compatible binary or restoration of the pre-upgrade backup (#1175).
- BreakingPersonaBot deletion adds Profile schema Generation 66; back up before upgrading and repair forward instead of rolling back only code. Direct Registry
remove/purgecalls now refuse: use the confirmed deletion owner, which retains identity and usage history (#896).
v1.1.0
19 changes
PersonaBots can run Bot Schedules and manage them themselves, every Session starts with the Bot's Soul and Core Memory, the Channel sidebar sections share one card design, WeChat accepts voice transcripts and images, each Bot's Memory keeps a .botharness/bot.json profile for the Bot Marketplace, the plugin sends anonymous usage statistics that can be turned off, and Bot settings can install a DeepSeekBot update and restart DSH with one click.
- AddedAdded a candidate personal WeChat voice source path using platform-provided transcripts and explicit missing-transcript states in the Bot Inbox, without adding ASR or audio playback; a real native voice → model → original-DM reply was confirmed by the Human (#905).
- AddedAdded a source-preview WeChat image path with automatic image preview inside the original Inbox message bubble, native model image input and own-identity native image replies, with the original-DM image receipt confirmed by the Human (#904, connection guide).
- AddedPersonaBots gain Bot Schedules: the Channel sidebar's Schedules section lets the Human create, edit, pause and delete minute, hourly or daily tasks; each firing lands in the Bot Inbox and wakes the Orchestrator, and every schedule shows its last 20 firings with links to the handling session (#960, ADR-0133).
- AddedDeepSeekBot now writes
.botharness/bot.jsoninto each Bot's Memory when the Bot is created, and updates it when its name, roles or avatar change. Existing Bots get the file on the next start. A shared Bot therefore shows the same name, roles and avatar in the Bot Marketplace as in the sidebar (#966, guide). - AddedDeepSeekBot sends anonymous usage statistics from the DSH Host, tied only to a random install ID:
plugin_started(plugin and DSH version, OS, architecture),bot_created,bot_archived,bot_deleted,marketplace_bot_installed,connector_enabled(connector type only),avatar_edited, onedaily_usagesummary (counts of PersonaBots, Sessions and messages, and the window in hours), and unhandled BotHarness errors in the Host as$exceptionreports with the error type and a stack reduced to package-relative file names, never the message or a file path; Bot mode explains this once in a notice linking the privacy page and source. Turn it off with the Anonymous usage statistics switch in Bot settings, which applies at once without a restart and is remembered;telemetry: falsein the core plugin config,DO_NOT_TRACK=1orBOTHARNESS_TELEMETRY=0force it off and lock the switch (#951, #952, ADR-0132, guide). - AddedPersonaBots can manage their own Bot Schedules: ask a Bot to do something every hour or every day and it creates the schedule itself, marked as Bot-created in the sidebar; it can also change or delete any schedule the Human has not locked. The Human locks a schedule from its row or editor, at most 20 schedules can be enabled per Bot, the sidebar updates as soon as the Bot changes a schedule, and DSH's own
schedule_*tools are refused in the Orchestrator so a Bot keeps one schedule list (#961). - AddedBot Schedules can now run weekly on chosen days, once at a date and time (turning themselves off afterwards), or on a five-field cron expression, all in the schedule's own time zone; the editor previews the next three runs, the Bot's schedule tools accept the same cadences, and Run now on a row wakes the Orchestrator immediately without moving the next planned run. The new Schedules guide covers each cadence, Run now, pausing and locking (#962).
- AddedBot settings can install a newer DeepSeekBot release with one click through DSH's Plugin Manager. On the web, Restart now then restarts
dsh webin the same terminal and the page reconnects on its own; DSH Desktop shows how to quit and reopen. When the Plugin Manager is unavailable or the install fails, the reason and the manual update command are shown instead. The new Update DeepSeekBot guide covers each step (#986). - ChangedThe Channel sidebar's Sessions, Bot Inbox and Workspace Grants sections now use the same card rows as Schedules, with an icon, status chips and a meta line on every row; a Bot Inbox item from a Bot Schedule now opens that schedule (#972).
- ChangedThe Channel sidebar's Computer and Browser sections now use the same card rows: a status card shows the target (local or Docker), a state chip such as Running, Needs setup or Paused, and its controls, and the Browser's open tabs are listed as card rows (#975).
- ChangedThe Bot Profile avatar area is now one Avatar section with two side-by-side choices, Design a pixel avatar and Upload an image, and marks the one in use; the duplicate Change avatar button is gone and the divider under the profile header has whitespace around it (#985).
- ChangedA PersonaBot's persona file is now
SOUL.md, its Soul, and every Session also starts with its Core Memory,MEMORY.md, so a new conversation already knows what the Bot remembers. Both are frozen for the Session with a character usage header (5,000 and 3,000 by default), new Bots get a shortMEMORY.mdtemplate, and an existingPERSONA.mdis renamed toSOUL.mdon the next start (#988, ADR-0134). - ChangedEach Bot's profile has a Standing memory limits section for the
SOUL.mdandMEMORY.mdcharacter limits, with their approximate size in Chinese characters and English words, applied from the next Session. The Memory panel pins both files at the top with a Standing badge and their current usage, highlighted when over the limit, and Memory search now covers them (#989, ADR-0134). - FixedLark user targets with an explicit private chat ID can receive unmentioned private messages into the same PersonaBot Inbox and reply through its bound identity; targets without that locator remain send-only (#996).
- DocsDocumented the development-source Discord file candidate with actual model save/process/import/original-thread result, independent unchanged-input/output byte proof and temporary Workspace write cleanup (#1002, verification).
- DocsNew guide Bot Soul and Core Memory: why
SOUL.mdandMEMORY.mdstart every Session frozen, what each file is for and why there is noUSER.md, the character limits with their approximate size and token cost in Chinese and English, how to change them, what an over-limit file looks like, when edits take effect, and how to shapeMEMORY.mdtogether with the Bot (#990, ADR-0134). - DocsThe GitHub and npm READMEs cover Bot Schedules, the Bot Marketplace and update notes, add a Release highlights section drawn from this ledger, and replace the screenshots with a high-resolution gallery in which every avatar is a BotPixel pixel avatar (#984).
- DocsDocumented the isolated Discord nearby context candidate: exact native source container, five-minute window, sparse Human-text minima and bounded continuation; real-model sparse pagination, canonical retention, original-thread reply and temporary permission restoration are verified independently of product promotion (#981, guide).
- DocsDocumented final development-source Discord context acceptance with real model continuation, precise edited-source refusal, whole-page rollback and restored Message Content permissions (#937, verification).
v1.0.2
3 changes
Bot mode shows what changed after an install or update and checks npm for newer releases, context reads keep precise source-conflict refusals, and a Share a Bot guide explains publishing a Bot to the Bot Marketplace.
- AddedBot mode shows the changelog of the installed version after the first install and every release since the last one you saw after an update, and Bot settings show the installed version, check npm for a newer release with its notes and the update command, and link the website changelog (#947).
- FixedContext reads now retain the precise
source-conflictrefusal when native history disagrees with retained evidence, rolling back the conflicting page without replacing its original source (#937, verification). - DocsAdded the Share a Bot guide: check Memory before publishing, a copy-paste prompt that has the Bot publish itself to GitHub, listing in the Bot Marketplace, and the
.botharness/bot.jsonreference (#958).
v1.0.1
393 changes
First stable DeepSeekBot release on npm: PersonaBots with their own identity, Git Memory, Groups, Assignments, pixel avatars, Lark, Slack, Discord and WeChat identities, and the first Bot Marketplace, installed into DSH as one plugin. Version 1.0.0 was not released as a product.
- AddedAdded paired-owner WeChat file intake and original-DM file replies through the existing attachment and Bot Inbox workflow, with bounded private downloads and an authorization check after upload (#903, connection guide).
- AddedAdded a personal WeChat paired-owner text path into the existing Bot Inbox and own-identity reply, with explicit DM authorization and private source continuations; source and locally installed product exchanges are verified and Human QA approved (#878, ADR-0129, connection guide).
- AddedPersonaBot creation offers colleague, roleplay and blank starting points with editable PERSONA.md text; switching preserves drafts, while permissions and runtime capabilities stay the same (#325).
- AddedAdded the candidate checked Discord Provider registration and existing Inbox/source presentation contract, preserving exact channel/public-thread routes; real channel/thread model replies and agent-operated UI acceptance passed, with remaining native qualification pending (#855, ADR-0128).
- AddedPersonaBots can explicitly publish Slack reports without mirroring them into local chat, inspect the saved text and native receipt, and answer eligible Human follow-up in the original Slack topic (#863, IM integration guide).
- AddedPersonaBots can explicitly follow or leave an authorized Slack native topic after real ordinary-reply delivery is verified, reusing count/time harvest and Human overrides; Profile retains topic management for migrated Channel connectors (#854, IM integration guide).
- AddedWhen live activity sync drops, the sidebar says so, avatars keep the last observed state with greyed, paused activity indicators and no decorative motion, and everything resumes from a fresh Host baseline after reconnect or restart (#756).
- AddedA PersonaBot whose saved Avatar uses an unavailable version no longer disappears: its original design is retained, the matching saved snapshot is shown with an explanation that editing and character animation are paused, activity and approval indicators keep working, and the design returns automatically once the version is available; mismatched or unsafe saved appearance data is ignored without losing the PersonaBot (#755).
- AddedPixel-family Avatars can choose bangs, side hair and back hair separately and adjust eye spacing, feature height and hair length within bounds in the Profile editor; saved Avatars without these choices render unchanged (#752).
- AddedPixel-family side poses and thinking head-turn frames now read as a real three-quarter turn: features shift toward the facing side, the far eye narrows, only the near ear shows and the chin tucks; side tails stay attached to the head and the mouth stays centred (#752).
- AddedCompleted Assignment Reports and Host-confirmed native completion retain separate navigable Inbox sources linked by trusted Session/Turn identity, without a duplicate wake; late notices remain pending across restart until a real Turn handles them (#194, ADR-0077).
- AddedAdded a resumable Lark / Feishu setup guide in PersonaBot Profile that locates real IM controls and checks current account, identity, group authorization and same-topic reply evidence without storing a separate onboarding workflow (#824, guide).
- AddedAdded independently editable Slack intake, harvest and bound-identity defaults in Bot settings, with Profile inheritance and explicit overrides preserved (#843).
- AddedHuman can explicitly collect ordinary text from an authorized Slack channel and choose existing count/time harvest or safely queued immediate wake in Profile; new connections remain mention-only, and overlapping mention subscriptions are deduplicated (#837).
- AddedAdded a product-artifact build and isolated installation path composing Core, Client and an independently versioned qualified IM Provider, with disconnected initial accounts and product-managed Provider updates; public npm publication remains a separate release action (#823, packaging guide).
- AddedLine-family PersonaBot avatars now morph into a stroke symbol bound to the current DSH tool (the same 16 as the pixel family: read, write, edit, bash, grep, web search/fetch, ask_user_question, todo, subagent, workflow, goal, present, approval and more), hold it at least 0.5s while the activity lasts, morph directly between tools and return to the face when the turn ends (#838).
- AddedPersonaBots can read an explicitly mentioned Slack source file and return a processed file in the original native thread, using canonical attachment tools, current own-identity authorization and a pre-completion fence; source details retain safe file type/size metadata (#831).
- AddedLine-family PersonaBot avatars gain more kaomoji-style eyes (big sparkly, hearts, rings, tall ovals, ^ ^, half-lidded, droopy), brows (thick, maro dots, thin) and mouths (▽, teeth, little fang, dot, pout, nervous zigzag, big laugh), and the Profile editor offers twelve face-only Line presets; Avatars no longer draw the corner
!?attention mark or manga symbols, and the Profile preview, header title and pinned PersonaBots show the activity indicator and attention count beside the name instead of on the avatar (#833). - AddedHuman can change the Profile-wide Assignment concurrency limit (1–32, default 3) in Bot mode Settings; saves govern subsequent admission immediately and survive restart, while lowering the limit preserves running work (#825).
- AddedChannel sidebar edit mode can hide or restore individual items, saving visibility and order together with Done, discarding both with Cancel, and recovering all items through Restore defaults (#809).
- AddedPersonaBots can explicitly read bounded Slack channel, nearby and native-thread Human text from an authorized source, paginate dense five-minute windows and inspect context in source details without historical Inbox admission (#819).
- AddedPixel-family PersonaBot avatars are redrawn as 32×32 chibi pixel art (bigger heads and eyes, layered hair and clothes shading, a solid tile in the hair colour family) with new hairstyles, outfits and headwear and twelve selectable presets, and while thinking or working the whole pixel Avatar morphs (0.8s) into a pixel symbol in its hair colour bound to the current DSH tool (read, write, edit, bash, grep, web search/fetch, ask_user_question, todo, subagent, workflow, goal, present, approval and more), holding at least 0.5s and returning to the face when the turn ends; sidebar contact rows show the activity indicator and attention count beside the name instead of on the avatar (#800).
- AddedAdded a checked Slack text-mention path from an independently bound PersonaBot identity into its canonical Inbox and original native thread reply, reusing Profile identity/connector tables and source details; context, attachments and ordinary-message policies remain separate qualification slices (#802, ADR-0126).
- AddedHost Plugins can subscribe to PersonaBot committed public output with trusted Session/Channel references; failed consumers cannot roll back messages or block other listeners, and restart does not replay notifications (#125).
- AddedLine-family PersonaBot avatars briefly morph their face strokes into a symbol for the new activity (?, magnifier,
</>, !, ♪, smiling face) and back, using morphicons spring stroke morphing; transitions retarget mid-way from the displayed shape and replace the corner activity marks, are shorter on small avatars and are skipped under reduced motion (#754). - AddedAdded an opt-in Container
agent-browserdriver using the existing Browser Viewer, takeover, uploads and persistent profile; Local and Container retain independent default drivers (#768). - AddedPersonaBot Profile can switch the avatar between the pixel family and a new original line family (bold strokes on a coloured tile) with its own eyes and mouths (including kaomoji such as
> <, T T, ω and ▽), brows, nose, cheeks, glasses, manga symbols (sweat, anger vein, gloom lines, sparkle and more), background/line colors and bounded spacing, height and tilt; line avatars save, snapshot, animate, show independent approval attention and recover through the same path; large avatars of both families show a manga!?mark while action is needed (#753). - AddedBrowser observations now include bounded form values and control states; the optional Local agent-browser snapshot removes repeated scaffolding while retaining page/dialog content and exact action refs (#787).
- AddedAdded an optional Local agent-browser trial driver behind the existing Browser permissions and Human controls; the current driver remains the default (#767, ADR-0124).
- AddedGroup facepiles show at most three avatars, prioritizing active members with stable order and accurate overflow; Group header avatars now expose each member’s safe live status to hover and keyboard focus, and open up to three active-first avatar/name/state chips in the existing Group Profile popover (#124).
- AddedGroup activity now names each active PersonaBot in the compact summary and expanded list, with keyboard-accessible avatars showing the same safe shared status (#124).
- AddedPersonaBot Profile can preview, cancel and save an original pixel-art avatar from a Notion-Faces-style catalog of face, hair, eyes, brows, nose, mouth, cheeks, glasses, accessory, skin/hair/eye/shirt color, angle, outfit and backdrop; Bots without a saved or uploaded avatar get a name-seeded pixel default that the create dialog previews; the saved identity appears in sidebar and enlarged Profile, follows existing activity and independent approval attention, and survives restart (#751).
- AddedAdded explicit Chrome Profile pairing for cross-tab discovery, navigation and ref-based webpage control, preserving Browser Access, Session approval and Pause (#774, guide, ADR-0123).
- AddedShared Channel members can explicitly answer an external Lark source using their own independently authorized identity, with inspectable sender/source details and one durable reply per member/source (#637).
- AddedCompleted Assignment reports now show a neutral information indicator across PersonaBot Activity views, separate from action-required badge counts; Inbox dismissal or ignore clears it without changing execution (#123).
- AddedPending Workspace Grant requests now contribute to PersonaBot attention across the sidebar, composer and Overview; authorized replies or Inbox dismissal clear the indicator without changing execution (#123).
- AddedOrchestrators can explicitly wait for an owned Assignment report or completion; shared Activity presents Assignment work during that bounded wait and restores Orchestrator selection on report, cancellation or timeout (#123).
- AddedAdded explicit observe, type and click control of one Human-selected daily Chrome document through the official Playwright extension, with separate confirmation, Pause/Resume and automatic revocation (#766, guide, ADR-0121).
- AddedAssignment reports awaiting a Human answer or blocked decision now share independent Activity badge counts with sidebar, composer and Overview; canonical responses, dismissal and stop clear the counts, and unresolved durable reports survive restart (#123).
- AddedA Human can route multiple authorized Lark groups into shared Channels, explicit Bot DMs or Inbox-only targets, with independent connector switches, one canonical message and one processing unit per overlapping Bot; each receiving path retains its own policy evidence (#635, ADR-0120).
- AddedPending native Bot questions now contribute to the shared attention badge alongside Tool approvals, with distinct hover counts and immediate clearing after answer or cancellation; execution motion remains independent (#123).
- AddedAdded Lark platform behavior defaults in Bot settings, with explicit Profile inheritance, preserved custom settings, stale-save protection, and revisioned future-message intake/harvest and identity pause behavior. (#701)
- AddedBots can send an authorized report only to Lark, inspect its canonical Outbox content and checked external message ID in Profile, then associate a genuine mentioned reply with that report and answer in its original external topic without a local DM/Channel mirror (#639).
- AddedThinking and working PersonaBot avatars use a compact BotUI dot matrix instead of a static blue execution dot; idle avatars hide the marker and the shared reduced-motion preference keeps it still (#744).
- AddedHumans can explicitly lend one daily Chrome tab read-only to a PersonaBot through a local extension, reuse its login state with
browser_observe, and return it from the extension or Channel sidebar; navigation, lost connection and restart revoke the temporary lease (#741, guide, ADR-0116). - AddedPersonaBot avatars and the composer show live native Tool approval counts independently of execution; the existing revisioned Host snapshot/live stream clears accepted, rejected and cancelled requests without replaying stale approvals (#123).
- AddedBots can explicitly share one own-Inbox external source into a joined team Channel, showing the clickable Bridge source above the original message with details in a Modal, and preserving provenance and independent member attention without forwarding future traffic or borrowing external identities (#636).
- AddedActivity Center Overview uses the Host-selected execution state and safe Tool summary shared with sidebar/composer; pending native questions and approvals remain separate Human actions while live owned Session cards stay visible (#123).
- AddedActive Orchestrator work determines the shared Bot Activity without concurrent Assignment Tool details overriding it; expanded Session rows still show both, and finishing the Orchestrator returns presentation to remaining Assignment work (#123).
- AddedAdded a managed Container Browser target with separate profile data, the existing native Browser approval and an authenticated Human preview with explicit paused interaction; Local stays the default (#726, ADR-0114).
- AddedChannel sidebar settings adds personal order editing with drag and keyboard controls, draft Done/Cancel/default actions, permission-safe expansion restoration and separate browser-persistent DM/group orders (#721).
- AddedComputer and Browser Access use compact Lucide Power controls with localized permission actions, Host-confirmed state, pending guards and failure feedback (#720).
- AddedMemory sidebar reads retain successful scoped content through refresh and reopening, use skeletons only before the first result, and recover through failure-only Retry actions without header refresh controls (#719).
- AddedChannel sidebar entries use Lucide function icons and a single top settings gear for Sessions and Memory evolution display choices, preserving their existing preference scopes (#718).
- AddedHumans can select
@All Botsin a Group composer with an explicit active-recipient count; individual Bot picker rows show only avatar, name and role labels; stale previews require a fresh send and the committed message follows existing per-Bot mention attention and wake policies (#542). - AddedExplicitly trusted Host Plugins can read bounded canonical Tool arguments/results from opaque Activity references; unauthorized, expired and revoked reads fail closed without exposing payloads to Channel activity (#122).
- AddedGroup Profile shows effective per-member attention; explicitly collected ordinary Lark messages retain one shared history and independently use each member’s existing count/time harvest or safely queued immediate policy (#638).
- AddedGroup Channel Profile manages one authorized Lark Bridge through an Attention-style table, independent intake Switch and edit/delete Modal; pause preserves accepted sources, deletion removes intake without deleting Bot identity or history (#700).
- AddedOverview Statistics adds compact per-Bot seven-day Memory Git commit trends and current uncommitted-change indicators, with explicit repository unavailability and exact daily detail (#716). Existing Bot Profile Memory activity uses the same ordinary-commit date/ref definition.
- AddedThe expanded composer status shows each active Session’s latest safe activity inside its own compact block, without repeating the Bot name; Host revisions synchronize current rows, completed/disposed Sessions disappear and restart rebuilds the current baseline without copying Session payloads; the expanded container is transparent, desktop name/status share one line, and Assignment cards show native DSH titles (#122).
- AddedOverview Statistics shows reported token totals across Bots with today/seven-day trends, compact Profile-aligned charts, paginated Bot details and direct Profile navigation; unknown buckets and retained usage remain explicit (#709).
- AddedBrowser tab Activity can show the Provider-declared operation in shared sidebar/composer summaries; only bounded public text is admitted, conflicting concurrent detail is omitted, and raw URLs, titles and tool payloads remain excluded (#122).
- AddedActive tool summaries now identify trusted Orchestrator, Assignment and DSH Subagent sources, count working Sessions separately from concurrent tools, clear finished sources through the same revisioned Host projection, and use compact role rows aligned with Overview (#122).
- AddedOverview prioritizes Bots waiting for Human action, adds one-click message read without resolving requests, and separates collapsible Channel statistics with the existing TanStack chart (#705).
- AddedAdded macOS Local Computer with a shared Profile target selector, explicit desktop permission checks and per-Bot authorization; fresh installations use the host desktop while legacy Docker configurations keep their target (#694).
- AddedPersonaBot Profile separates external identities from source authorization, with account-only binding, durable pause/resume, local naming, reconnect and explicit unbind that preserves accepted history; existing grants retain their exact scopes (#699, ADR-0111).
- AddedOverview shows today’s Human-accessible Channel message totals with Human/Bot/other segments, current sender names and expandable details; day/timezone and read-only Channel navigation remain explicit (#703).
- AddedOverview defaults to active Bots, keeps Bots with Human actions visible, and lets Humans answer or decide from each Bot card; compact executing Session tiles show current native names and role icons, with exact Session navigation (#698).
- AddedPersonaBots can explicitly follow a verified Lark Thread, admit its ordinary replies with inherited or overridden harvest, and unfollow without changing group collection; Humans can inspect and override participation (#614, ADR-0110).
- AddedPersonaBot activity now shows Host-declared tool effects and compact safe summaries in the sidebar and composer; concurrent mixed kinds fall back to generic work, and a keyboard-accessible disclosure shows only the current tool summary without raw arguments or results (#122).
- AddedActivity Center uses a compact unread chip beside Bot mode settings, switches to an aligned icon below Bot mode when collapsed, and remembers the last Overview or Inbox tab across chats and reload; expanded shows only the unread badge (hover or focus reveals an empty entry only in Bot mode) and collapsed shows its icon only in Bot mode, using a top-right red notification dot (#679).
- AddedA Human or the bound Bot can configure ordinary text collection per authorized external group, independently choosing count/time harvest, next-turn wake, mention context or silent reads; versioned Admissions preserve their original policy and ordinary traffic never interrupts an active step (#613, ADR-0109).
- AddedA Human can bridge authorized Lark mentions into an existing shared Group Channel: all current members can read one retained external message with its origin, while only the addressed bound Bot wakes and can explicitly reply through its own identity (#634, ADR-0108).
- AddedActivity Center opens a cross-Bot Overview with the canonical Human action count, current Bot status and executing Orchestrator/Assignment Sessions; Bot cards open DMs and Session rows switch to the exact native DSH Session (#541).
- AddedA mention-only PersonaBot can explicitly read bounded Lark group, nearby Chat time-window or anchored topic context through its own identity; the Inbox source uses a readable chat layout with named mentions and expandable exact message/source references, sender identities and read history, omissions and permission refusals without admitting ordinary history or creating wakes; non-advancing provider cursors refuse before retaining or observing returned messages (#612).
- AddedA PersonaBot can process a ZIP received through an authorized Lark file reply, save an independent working copy, and explicitly return a newly selected file in the same topic; Bot Inbox exposes an on-demand original download through the qualified temporary provider (#657, file guide, ADR-0107).
- AddedHuman Inbox adds filterable Handled history for answered questions, tool decisions, Workspace Grant replies and Assignment responses, with exact request/answer navigation; live actions stay oldest-first and refresh from canonical facts across windows and restart (#553).
- AddedHumans can authorize a Workspace Grant request or answer a waiting/blocked Assignment inside Human Inbox with source context and exact Session navigation; committed replies use the Bot DM authority and refresh canonical action state (#552).
- AddedHumans can answer a live native Bot question inside Human Inbox using the same options or custom input as its source DM card; answers resume the original request once, refresh resolved or stale actions, and preserve other Bots independently (#551).
- AddedHumans can inspect a live tool request and approve or reject it directly in Human Inbox, with expandable source messages and exact navigation. Decisions use the source DM command, remove the resolved action while leaving other Bots independent, and refresh stale requests (#550).
- AddedA PersonaBot can read a specified received original through native file tools and explicitly edit it with Human approval; original-message downloads and shared references show current contents, while independent uploads and default working copies remain separate (#633, file guide).
- AddedHuman-participating DM and Group headers now offer My nickname; independent Channel names inherit the plugin default when cleared, and historical mentions plus Inbox and Bot context use their source Channel name without changing identity or attention (#622).
- AddedAdded actual model/provider and execution-role filters to PersonaBot usage, with separate retained all-time totals, a seven-day chart default, and visible query freshness or failures (#507).
- AddedThe local Human can save an optional default name in plugin settings; Channel authors, members, receipts and Bot context use the current name, and historical trusted Human/Bot mentions resolve current labels by stable identity without changing message content or attention (#621, ADR-0103).
- AddedHuman can explicitly allow a PersonaBot to write one granted work folder, save a received file there, process it with native tools and approved Shell calls, and return a separately downloadable result (#632, ADR-0105).
- AddedA Human can enable text mentions from one authorized Lark work group into a bound PersonaBot’s canonical Inbox; the Bot uses its own identity to explicitly reply in the original group/topic, with retained origin details, exclusive intake and no implicit Human DM mirror. This isolated tracer uses the qualified temporary provider and does not enable production IM (#12, ADR-0106).
- AddedPersonaBots can explicitly mention the local Human in a Group using its current member identity; Human Inbox combines trusted mentions and direct replies in one personal view with expandable context and inline replies, while ordinary
@Humantext creates no personal reminder (#549). - AddedPersonaBot Profile coordinates daily and actual-model usage charts with one bounded time range, initially the most recent 7 days; a Model / Provider switch shows only the selected dimension; default model rows combine providers and execution roles as compact name-and-total rows, with inclusive input, cache reads, output and weighted percentages in chart hover tooltips alongside composition and cache-ratio charts; keyboard-accessible Details disclose Session categories (#592).
- AddedExisting message attachments migrate at Host startup to resumable independent real-file identities; their original menus open the current destination, equal hashes remain independent, and owner-qualified old reads follow saved contents without rewriting messages or waking Bots (#577, migration guide).
- AddedLocal IM verification Profiles can explicitly install the qualified temporary dsh-im fork at an immutable Git revision, with a runtime check before boot; the legacy npm package remains disabled and production enablement still requires upstream qualification (#117, guide, ADR-0104).
- AddedPersonaBot model usage now separates Orchestrator, Assignment and DSH Subagent calls by actual provider/model, including reported failed and retried attempts; missing reports remain unknown (#503, ADR-0094).
- AddedHuman Inbox shows direct Group replies to the local Human in a personal view, with Bot/Channel filters, exact source navigation and inline replies. Nearby messages appear chronologically with author, avatar and time; personal replies and other unread messages share one canonical unread count (#548).
- AddedAdded a PersonaBot Profile IM connection flow for explicit account and destination grants, durable send records and honest unknown outcomes; external sends require the compatible public dsh-im contract and remain disabled with legacy services (#117, ADR-0101).
- AddedHuman Inbox lets a Human inspect an unread Group or PersonaBot DM message with nearby context and reply inline; unavailable sources are rejected and failed attempts retain the draft (#547).
- AddedPersonaBot Profile shows daily usage by the provider/model actually called, with separate input, output, cache-read and cache-write tokens, provider-reported totals, and explicit unknown buckets when a provider omits usage (#499).
- AddedHumans can open the current Memory Repository, nested directories and files on the Host through DSH application menus, reveal a file, copy its Host path, or download its full current bytes to the browser device; ordinary file selection still uses the reader (#574, ADR-0100).
- AddedHumans can click or right-click an authorized Workspace path to open its current Host directory with a detected application or copy its path; the Host checks the current Workspace Grant and registry identity without changing Grants, Session cwd, or access (#575, ADR-0100).
- AddedNew message attachments open their actual Host destination through the file menu; external saves appear in subsequent message reads and downloads, independent uploads stay separate, and explicit reference reuse shares the current file without notifications or Bot wake (#576, file guide).
- AddedHuman Inbox groups unread Group and PersonaBot DM messages by Channel, shows their deduplicated message count on the sidebar entry, and marks a captured message read only when opened or explicitly acknowledged; pending actions keep a separate indicator (#546, ADR-0098).
- AddedA PersonaBot's message delivery is settable per source in Profile: for Human DM, Bot DM, and Group mention rules a Human chooses whether a message arriving during an active turn folds into it (
steer, the unchanged default) or queues as its own turn (turn), and already queued messages keep their revision (#528). - AddedGroup Channels now open a Group Profile from the chat header, with a daily heatmap of committed messages and a per-author breakdown; pinned Group cards appear in its popover (#424, ADR-0085).
- AddedBrowser observation now covers role-less click targets (icons and custom buttons such as Bilibili's publish controls): they appear as
clickablewith refs, ref clicks dispatch real input events at the element centre, andbrowser_clickadditionally accepts viewport x/y coordinates from a 1:1 CSS-pixelbrowser_screenshotfor anything without a ref (#526). - AddedPersonaBots can be assigned a named Bot Browser profile (default: the shared profile); bots on the same profile share its logins, and different profiles run as separate browsers on demand with independent idle stops. The Browser entry has a Profile field to change a Bot's assignment (#497, ADR-0096).
- AddedHumans can create a local Model Preset in a PersonaBot Profile and apply an independent Bot plan; its Orchestrator uses the chosen provider, model, and reasoning effort from the next turn (#498, ADR-0093).
- AddedHumans can revise a reusable Model Preset for future applications, switch a PersonaBot from a compact Profile control, or save that Bot's Orchestrator choice as a custom snapshot. Existing Bot snapshots keep their routes, stale template edits are rejected, and each application or custom edit increments the Bot plan revision (#501, ADR-0093).
- AddedHumans can choose the models and reasoning efforts available to a PersonaBot's new Assignments in Profile, including each model's default and one overall default. The Orchestrator can select an allowed route for a new Assignment; its DSH Session uses that route, while choices outside the Bot plan are rejected before work starts (#504, ADR-0093).
- AddedExisting Assignments keep their model when a Human changes the Bot's preset; an Orchestrator can explicitly switch one to a route allowed by the current Bot plan for its next DSH request, while rejected choices leave its route intact (#506, ADR-0093).
- AddedDSH Subagents started by a PersonaBot inherit an allowed parent model and effort. If an older Assignment uses a route excluded by the Bot's current plan, its new child uses the current Assignment default and tells the parent; out-of-plan and unavailable choices fail before child creation (#508, ADR-0093).
- AddedA PersonaBot can attach Host files to a page through
browser_upload(optionally clicking the control that opens the picker first): the native dialog is intercepted and the page's file input receives the path, with the audit recording only the file's basename (#491). - Added
browser_screenshotnow also saves the capture under the browser data directory and reports its path, keeping only the newest captures (#494). - AddedMemory evolution now offers audited recovery checkpoints for branch, commit, staged, and working-tree state. A Human can confirm a restore while the original repository is archived; checkpoint context distinguishes observation from Git authorship (#115, ADR-0097).
- AddedA PersonaBot can keep several tabs as owned background tabs on the shared Bot Browser through
browser_tabs(list, open, select, close): background tabs are opened without stealing focus, observe and actions follow the selected tab, idle Bot tabs close while the browser keeps running, and a Human-closed tab recovers through list/select or a new open (#463). - AddedA PersonaBot can act as well as read in the Bot Browser:
browser_click,browser_type,browser_press_key,browser_scroll, andbrowser_waituse refs from the latest observation, a stale ref fails with a clear re-observe instruction, and typed text enters the audit only as a character count (#462). - AddedThe Browser entry shows a live frame of the Bot's current tab and offers a Human takeover that pauses that Bot's browser actions and model screenshots until released; the Bot gains a
browser_screenshottool whose images reach the model only as attachments and never the audit (#461, ADR-0090). - AddedA PersonaBot can browse the web in the profile's shared Bot Browser once the Human turns on its Browser Access: the read-only
browser_openandbrowser_observetools with guidance are injected only into that PersonaBot's sessions, the first action of a session asks the Human once (a profile switch can auto-allow), every observation and action is recorded as a redacted Browser Audit entry, and a version-pinned Chrome for Testing is installed on demand when the machine has no browser (#460, ADR-0089, ADR-0090). - AddedMemory changes made with external tools now enter the PersonaBot's durable Bot Inbox with changed paths. Edits made while the Host is closed are recovered at startup and reach the Agent on its next ordinary turn, without an extra wake or file-content injection (#350, #352, #464, ADR-0092).
- AddedA PersonaBot can leave any joined Group through
group_leave; its Channel access ends immediately, a single system notice distinguishes voluntary departure from removal and records per-member Inbox admissions under each remaining Bot's Channel wake policy; the leaver's pending Group Inbox Admissions settle without removing message history or creating false Human Inbox repair items; if it created the Group, the remaining members continue under Human management; a failed post-commit wake is retried while the Host stays live (#372, ADR-0073). - AddedPersonaBot DMs now separate Memory files from Git evolution: files in an expandable folder tree open read-only in the Channel body; commit history and current diffs appear together in compact reading panes with old and new line numbers, grouped by New memories and Updates to existing memories by default, with a persistent Git terminology option and status badges. External edits refresh automatically; the evolution header offers Refresh and a terminology menu, while the sidebar shows one branch label without redundant history headings or section rules (#416, #444, #466, ADR-0088).
- AddedA PersonaBot can act on the shared Computer once the Human turns on its Computer Access: a curated observe/act/verify tool set with guidance is injected only into that PersonaBot's sessions, the first action of a session asks the Human once (a profile switch can auto-allow), and every observation and action is recorded as a redacted Computer Audit entry (#386, ADR-0079, ADR-0080).
- AddedGroup Channels keep the member roster separate from Group settings. Humans can crop a square WebP Group image, rename the Group, search for a PersonaBot to invite, handle pending invitations and join requests in a notification dialog, and manage each member through a menu for message policy or removal, and disband the Group from a secondary menu, with its avatar shown in ordinary, pinned, and collapsed navigation (#390).
- AddedA joined PersonaBot can read and change its own Group attention preference with Orchestrator Tools; Human and Bot edits share the same Channel value and leave attributable revision history, while previously admitted messages keep their original policy snapshot (#365).
- AddedA PersonaBot Profile now places a collapsible source-class policy section below its activity charts. Both sections fill the available Channel body width, showing all built-in attention defaults and their durable revision source; new Channel and Assignment admissions record the effective source revision while retaining immediate, Group digest, and conditional report delivery (#366).
- AddedPersonaBots can inspect all source attention defaults and seven-day Orchestrator wake counts through scoped Tools. A Bot or Human can edit Assignment report wake and the ordinary Group default (all, digest with count/interval, mentions, or silent), restore built-in defaults, and see the last editor and durable revision in the Profile. Saved per-Group preferences still take priority; existing Admissions keep their original policy snapshots (#370).
- AddedGroup Channel members can choose whether a PersonaBot sees every ordinary message immediately, receives a digest, only wakes for direct mentions, or records messages silently. A direct mention carries bounded pending context from the same Channel, including the oldest unread and nearby messages; the prompt reports omitted messages and later turns advance through the backlog. Explicitly read messages become Processing and settle as Handled on a successful turn or Needs repair on failure; unreturned messages stay pending. New members default to a digest, and a Group member or Bot message avatar opens that Bot's DM (#364).
- AddedOversized Assignment reports now retain a short Inbox preview with a DSH Spill locator without interrupting the Agent or requiring it to write a file; the Orchestrator can page through the accepted report and inspect recent Session events through bounded DSH Session Query reads, with the returned size and estimated token cost shown (#194).
- AddedGroup Channel receipts now include the local Human as a named unread/read recipient for Bot messages, backed by a durable Human membership and identity-keyed read position; sender messages exclude their author (#347, ADR-0078).
- AddedThe operational-logs skill (the reader guide for
logs.db) is listed in the skill and/catalogs only while the Bot settings Developer mode switch is on: on, a Human can invokereading-operational-logsand the model can load the guide on demand; off (the default), no client sees it (#248). - AddedStopping an Assignment now records a Host-authored lifecycle notice in the owning PersonaBot's Bot Inbox, so the Orchestrator can report a confirmed stop even without an Assignment report; unobserved notices survive Host restart and briefly retry while DSH's Agent Loop starts (#194).
- AddedExisting full-access Assignments remain visibly marked in the Bot's Session list after the Bot default is turned off or the Host restarts, using each Session's original permission snapshot (#116).
- AddedGroup Channel members can choose a silent inbox for a Bot: ordinary messages remain as durable pending admissions without an automatic wake, including after restart; direct @ mentions still wake immediately (#47).
- AddedOrchestrators can stop an Assignment through DSH cancellation; its stopped state survives restart, late reports cannot revive it, and the same continuity key can start a new Session (#194).
- AddedBot mode has a Human Inbox above Messages for pending Group join requests, live native Bot questions and tool approvals, and new Bot DM information. Users can return to each source to decide, mark informational messages read, filter by Bot or Channel, and sort by time (#126, ADR-0071).
- AddedAn Assignment that explicitly asks Human for input now appears once under Human Inbox action items, linked to its Assignment detail. A later blocked report updates that same item with the latest reason; it remains visible if the Assignment is still blocked after a reply, and clears when a newer report resolves it or the Assignment stops (#126, #47).
- AddedWorkspace Grant requests from a PersonaBot now appear as Human Inbox actions linked to the exact DM card. An authorized reply clears the action using a Host-validated Grant reference; ordinary replies leave it pending (#47, #126, ADR-0071).
- AddedA Bot Channel message that needs repair now appears in Human Inbox action items. Human can open the Bot Inbox or original message; a missing Channel degrades to Bot Inbox, and resolution removes the item without creating another Inbox store (#47, #126).
- AddedA completed Assignment report can appear under Human Inbox information; Human can open its Assignment or ignore that specific report. The decision survives restart, while a later report from the same Assignment appears again (#126, ADR-0071).
- AddedBot Inbox source groups reopen when new pending attention or a higher-severity state arrives; a manually collapsed group stays closed while its facts are unchanged (#152).
- AddedA PersonaBot DM sidebar now shows a Bot-scoped Inbox grouped by source Channel, with durable attention status, source-message navigation, and unavailable-source fallback; completed attention does not imply a reply (#47, #152, ADR-0070).
- AddedA PersonaBot can explicitly ignore a received or read Channel message through
inbox_ignore; the durable Bot Inbox and Channel delivery status distinguish this decision from a handled turn with no reply, while the original message remains in history (#47, #152). - AddedAssignment reports now enter the same durable Bot Inbox as Channel messages, with report state and a link to the owning Assignment. Unobserved due reports recover after restart; a report interrupted after entering the Orchestrator context shows needs-repair, and a completed turn never forces a Channel reply (#47, #152, ADR-0070).
- AddedA Human can select a Group Channel with
#in a PersonaBot DM; the Bot receives its current ID and name without gaining membership or seeing its roster or history. The Bot can request to join, a Human or the Group's Bot creator can approve or decline, and the Human can click the sent reference to open that Group (#292, ADR-0069). - AddedGroup Channel members can use a per-Bot ordinary-message digest: after N messages or T seconds with a nonempty queue, the Bot receives one bounded Inbox summary at its next idle turn. Direct @ mentions remain immediate; a busy Bot finishes its current turn first, and a completed digest does not require a reply. Explicitly reading a Group message observes the corresponding admission and removes it from later digests (#47).
- AddedPersonaBots can list joined Group, Human DM, and Bot DM Channels, filter by name or Bot membership, inspect current members, and send to a selected Channel by its stable ID; they can also query a joined Channel's full message history by text, author, and date, or search across joined Channels, with cursor pagination through the single
channel_readtool (#304). - AddedPersonaBot creation now offers an empty Memory Repository or an HTTPS/SSH Git import. The Host checks Git, clones into staging with its existing credentials, and only creates the Bot after a successful clone; failed imports leave no Bot (#298).
- AddedPersonaBots can create Group Channels, invite active colleagues through a durable pending invitation and Bot Inbox Admission, and let each invitee accept or decline before membership and Group access begin. The creator can rename the Group and remove Bot members; Humans see invitation states and can cancel invites, remove members, rename or logically delete the whole Group (#282, ADR-0065).
- AddedIn a Human–PersonaBot DM, selecting one or more other active Bots with
@gives the current Bot their stable IDs, current names, and bounded descriptions on its next turn. The selection alone does not wake or add those Bots to the DM (#280). - AddedA PersonaBot in a Group Channel can mention multiple joined colleagues with stable IDs; the Host renders their Bot badges, commits one message, and wakes each recipient independently while bounding Bot-to-Bot loops (#281, ADR-0065).
- AddedPersonaBots can now contact active colleagues through a two-member Bot DM. Each send commits one Channel message and a bodyless action link in the sender's Human DM; recipient Inbox Admission is conditional on hop-limit and causal-root deduplication checks; the recipient can reply in the same conversation. Humans can inspect these DMs from the hidden-channel manager in read-only mode (#279, ADR-0065).
- AddedIn a Group Channel, a Human can select multiple joined PersonaBots with
@; one committed message wakes each Bot independently, their replies stay in the Group, each processing state is visible, selected mentions appear as avatar-and-name badges without the @ sigil in both the draft and sent message, and clicking a sent badge opens that Bot’s DM. Existing Channel history moves once from NDJSON into the SQLite Messaging authority (#254, ADR-0037). - AddedA PersonaBot's checked-out Memory Git working tree is now its current memory: native Git can bring in unrelated histories, merges, code, and binary files without a second admission step. The Channel Memory view shows current files and all local branch history; binary files stay read-only in its text preview (#115, ADR-0068).
- AddedWhen a Memory branch request is ambiguous, the Orchestrator asks through DSH's native question service in the PersonaBot DM; the Human's choice resumes the same Session, and answered or cancelled cards stay closed after refresh (#264).
- AddedWhen a Memory branch switch encounters unfinished changes, the Orchestrator can coordinate affected Assignments, preserve work in a named Git stash, and retry in the same Session; the DM branch picker now filters local branches as the Human types (#263).
- AddedA Human can choose “Continue from here” on a Memory Git commit, name a new branch, and have the same Orchestrator Session create and switch to it; pending raw commits remain unaccepted and can be recovered through Human Repair (#262).
- AddedA Human can select an existing accepted Memory branch in the PersonaBot DM; the same Orchestrator Session switches the repository, reports progress in the Channel, and sees the new working-tree files on its next native read (#261).
- AddedPersonaBot DM Memory now shows the local Git branch and commit graph with acceptance and repair status; selecting a commit opens its changed files and diff across the Channel body, and returning preserves the chat draft and reading position (#260).
- AddedPersonaBot DMs can now open accepted Memory files, edit an existing Markdown file, and inspect validated commit history and diffs; Agent file writes are accepted after a successful turn, while provisional or divergent repository state blocks further saves and an explicit Human repair archives unfinished changes before restoring the accepted head (#115).
- AddedWhen a PersonaBot needs a project folder with no active Grant, its Orchestrator can place an authorization request card in the DM. The Human chooses a Host folder on the card, and the same Orchestrator Session resumes from the explicit approval reply before creating an Assignment (#116).
- AddedA Human can add a Host folder from the PersonaBot DM sidebar with the DSH picker or an absolute path, then remove its active Grant without deleting files; the sidebar shows fixed Memory and active folders by default, while the Bot settings Developer mode switch reveals revoked history and advanced folder options. New Assignments retain their selected Grant and single-directory permission snapshot; Bot-owned Sessions retain native DSH file and search tools with per-call Grant checks, while Shell and other tools whose file effects cannot be checked by path ask the Human in the Bot DM to allow or reject that exact call (#116, ADR-0067).
- AddedA PersonaBot tool approval card can save an exact-call or all-opaque-tool auto-approval rule for its current role and Workspace Grant scope; rules are revocable and each matching call remains audited by DSH. A separate per-Bot dangerous-access switch applies
danger-full-access + neverto new Assignments after explicit risk confirmation, while existing Assignments and the Orchestrator retain their mode (#116, ADR-0067). - AddedBot-mode channels now support Shift range selection and Ctrl/Command toggle selection across the visible roster. Right-clicking any selected Bot DM or group channel offers count-aware batch pin or unpin, move-to-section (including from the pinned area), and hide actions; each selection now commits through one bounded Host command and appears together, without a separate action bar; destructive batch deletion awaits #138 (#215).
- AddedPinned Channels now follow the global sort by default, can use their own recent/manual sort mode, and can be dragged between pinned-grid positions without unpinning. A manual drop persists the pinned order for both expanded and collapsed sidebars (#215).
- AddedIn the web sidebar, Alt+1–9 opens the corresponding visible channel and Alt+0 opens the tenth; holding Alt reveals the position labels, and Alt+Backquote toggles Bot mode. Editable fields keep their own keys. Desktop Ctrl/Command mapping remains a future host integration (#216).
- AddedBot and bridged Channel messages now render Markdown with DSH's safe native renderer, while Human messages retain literal text and line breaks (#142).
- AddedPersonaBot replies now appear as a live Channel draft while
channel_sendis generated, then settle into one committed message; interrupted drafts disappear with a clear status (#144, ADR-0054). - AddedChannel messages can now reply to a committed message in the same Channel. The composer supports Reply/Cancel; bubbles show an author-and-excerpt quote that jumps to older history, with a safe unavailable state when the original is gone (#145).
- AddedHuman and PersonaBot Channel messages can carry uploaded images and downloadable files. Upload failures remain retryable in the composer, while durable messages retain profile-scoped attachment references (#146).
- AddedThe Computer group in the Bot settings section can export to a directory chosen at export time and open its folder in the Host's file manager, and the directory can also be typed when the deployment mounts no directory picker (#168).
- AddedAdded the Computer group to the Bot settings section: its export directory is chosen through the Host's directory picker, the idle stop time is edited in place, and export/import run from the same page with an explicit authorization step; these settings are runtime settings, so they apply without restarting DSH (#168).
- AddedAdded a paged Channel timeline with grouped message bubbles, one Bot avatar and one sender/time per consecutive run (Human messages have no avatar), contextual Copy and Locate actions, scroll-anchored older-history loading, a jump to newer messages, and reopening near the last visibly read committed message (#143, ADR-0061).
- AddedAdded an optional Computer plugin: a profile-scoped shared Linux desktop that runs locally in Docker and appears in the DSH Web Client as an authenticated VNC panel, with explicit authorization for start and stop, live image-pull progress, idle stop, and one-file export/import of the Computer's persistent store; PersonaBot binding and a Settings-based directory picker remain follow-up slices (#150).
- AddedAdded the Channel sidebar shell: Bot mode's right region now renders ordered, collapsible entries (group members, DM Assignments) registered through one client-side seam (#156).
- AddedAdded the first Human-testable PersonaBot Assignment tracer bullet: a PersonaBot can receive a DM through its durable Bot Inbox, run an Orchestrator plus an independent Assignment Session, explicitly send the Assignment result back to the same Channel, and expose Assignment list/detail views; default Memory and Workspace Grant behavior remain follow-up work in #81.
- AddedAdded a persistent BotHarness motion preference with Follow system, Reduce motion, and Full motion modes, including a live accessible preview and one effective policy shared by Client surfaces (#128).
- AddedReworked the DM and group Channel composer as a responsive floating island with multiline input and an accessible, projection-only PersonaBot activity region (#129).
- AddedAdded deterministic, read-only GitHub Release draft preparation for the independent DeepSeekBot and DSH Skill release trains (guide, #103).
- AddedAdded a Computer export & migration guide covering the one-file move between machines, the durable
~/workspaceconvention for files that must survive a move, and size/time expectations (#154). - AddedAdded a Bot Marketplace to the sidebar + menu: paste a public GitHub repository carrying the
botharness-bottopic to list it, browse listed Bots, and install one as a new PersonaBot after a confirmation that shows the latest commit and a third-party risk notice (#916, ADR-0131). - AddedRepositories that add the
botharness-bottopic now appear in the Bot Marketplace after the daily discovery without a paste, and listed entries refresh hourly; removing the topic, archiving, deleting or making a repository private hides it, and renames keep the same entry (#917). - AddedThe Bot Marketplace can sort by recent update or stars, search names, descriptions, topics and READMEs (Chinese included) with relevance ranking, and filter by topic chips (#918).
- AddedOpening a Bot Marketplace entry shows its README rendered like GitHub (relative images and links resolve at the listed commit; scripts, event handlers and unsafe URLs are removed), with stars, update date, topics, a GitHub link and Install (#919).
- AddedBot authors can commit
.botharness/bot.jsonto share a display name, role badges and an avatar (a generated-avatar recipe or a committed PNG, JPEG or WebP image); the Bot Marketplace shows the name and badges, and installing applies the avatar from the cloned repository. Invalid descriptors are ignored (#920). - AddedPasting a repository or reporting a Bot in the Bot Marketplace now passes a self-hosted proof-of-work check (ALTCHA, no third-party CAPTCHA) whose cost rises with recent volume, with per-source and per-repository rate limits. Each entry has a Report button with an optional reason; reports from enough distinct sources hide the entry until an administrator restores it, and blocked repositories stay out of the catalog. Raw IP addresses are never stored (#921).
- AddedThe Bot Marketplace Worker documents a public, versioned read API (
/v1/bots,/v1/bots/{id},/v1/topics) for the product site, with CORS limited to deepseekbot.botharness.ai and its local dev origins and one-minute public caching (#922). - ChangedChannel header Profile entries and composer activity avatars now omit duplicate attention badges and activity dot matrices; sidebar indicators and activity disclosure remain available (#928).
- ChangedDeepSeekBot is published as a stable version on the npm
latesttag, withnextmoved along; install it withdsh plugin --profile web add deepseekbotor by enteringdeepseekbotin the desktop Add plugin dialog (#895, release guide). - ChangedChannel sections, pins, hidden entries and root order now persist in the Profile database after a validated one-time import; restart no longer depends on the retained legacy roster domain, while native sorting and per-Client collapse keep their existing owners (#885).
- ChangedPersonaBot identity, saved appearance, pause/access flags and independent model plans now survive restart in the owning Profile database; validated legacy
bot.jsonrecords are imported once and retained without runtime fallback, while Soul remains Git-backed (#884). - ChangedReusable Model Presets now persist in the Profile database, with a validated one-time import of existing templates and preserved IDs, revisions and independent applied Bot plans; legacy template files remain recovery inputs and are no longer used after cutover (#883).
- ChangedMany active Avatars now animate smoothly together: all transitions share one animation-frame loop, pixel-family tool transitions step at a pixel-art frame rate with merged color runs (
@botharness/pixel-morph0.2.0), and Avatars scrolled out of view skip transition work after updates, keeping 32 to 128 active mixed-family Avatars at full frame rate in measured runs (#757). - ChangedMade the packaged IM Provider qualification independent of developer selections and advanced its own artifact version for the accepted Slack capabilities (IM installation, #868).
- ChangedBot Inbox sidebar rows now put readable content first, separate source/report metadata from lifecycle status, and highlight items needing repair using the native error color (#851).
- ChangedChannel sidebar display settings open hover submenus that keep repeated selections visible and temporarily isolate the relevant entry for preview; dismissing restores prior disclosure while saving the chosen display preferences (#807).
- ChangedChannel message groups keep consecutive bubbles compact, show one hover/focus timestamp beside the author, and reveal per-message copy/reply beside delivery receipts without a reserved action row (#803).
- ChangedNearby external context now covers the five-minute window and supplements sparse sides to configurable preceding/following message minima, with 30-minute bounded continuations (#793).
- ChangedConnector authorization settings are more compact, with filled primary/destructive actions and contextual help available by hover, click, or keyboard (#780).
- ChangedUnified Container Browser and Docker Computer preview, fullscreen and explicit interaction controls in one shared Viewer; Browser waits for Host Pause before enabling input and keeps Pause when the view collapses (#736).
- ChangedHuman Inbox now uses native DSH filter menus and padded compact rows: open details by clicking a row, respond through primary actions, or jump to the exact source through its avatar and corner arrow; Activity Center keeps the current tab when browser storage rejects writes (#687).
- ChangedPersonaBot Attention policy now compares nine source rules in a compact table, with recent wakes, inline edit actions and secondary audit details (#670).
- ChangedBrowser Profile uses a searchable combobox: select an existing name or explicitly create a new one; errors use the destructive theme colour and the Browser view removes redundant help text and its duplicate page title (#611).
- Changed
channel_sendnow confirms the committed Channel and message IDs as JSON, describes forwarding exact trusted attachment references from reads, and exposes the existing 10-attachment / 20-mention limits and safe integer byte sizes (#570). - ChangedContact discovery now searches names and full descriptions, returns bounded cursor pages and optional detail, and preserves stable colleague IDs for real Bot DMs and Group collaboration (#568).
- ChangedAttention Tools now expose the complete Assignment-report and ordinary-Group parameter matrix, use integer digest schemas, and reject digest parameters outside Group digest mode without changing policy revisions; Human overrides and prospective Inbox snapshots still share the same authority (#567).
- ChangedChannel reads now return bounded actionable content with explicit continuation, preserving replies, trusted attachments and action references while leaving omitted or partially read messages pending in Bot Inbox (#565).
- ChangedGroup invitations now default to automatic acceptance without waking the invited PersonaBot; Bot settings can keep invitations pending for its own decision, and resolved invitations cannot wake again after redelivery or restart (#371, ADR-0073).
- ChangedChannel discovery and history Tools now enumerate supported filters and explain joined-search, author, date and legacy page-size behavior; exact lookups with no accessible match report it explicitly without revealing hidden Channels (#564).
- ChangedGroup join request and decision Tools now return compact Channel, request and requester references with the actual state, preserving approval-only access without copying full Group records or internal identity timestamps into model context (#563).
- ChangedGroup creation and invitation Tools now return compact Channel, invitation and invitee references with the actual decision state; accepting or declining no longer copies the full Group record into the model context, and declines still grant no Group access (#562).
- ChangedGroup rename and member-removal Tools acknowledge the committed Channel, name, outcome, and affected Bot without copying avatars or unrelated Group state into the model context; an unexpectedly missing rename result now fails explicitly (#561).
- ChangedBrowser Pause now explains that the Human can always use the local browser window directly; paused tool refusals point to Resume and a fresh observation, while page reading remains available (#495).
- ChangedPending context folded into a steer or harvest is now selected by the total character budget in arrival order (oldest first, no per-turn row sampling), so bursts of short messages — such as live chat comments — fold as many messages as the budget allows instead of at most twenty; messages beyond the budget stay pending for later turns (#528).
- ChangedHuman DM messages now steer an active Orchestrator turn at its next safe step by default — and any messages still pending in that DM are claimed into the same steer, mirroring the Group mention context harvest; bot-DM messages steer the same way. When no turn is running the behavior is unchanged (#528).
- ChangedIsolated Windows DSH development instances can safely adopt an existing WSL DeepSeek dev key once, so real model QA uses the same machine-local credential across both environments (#115, AX guide).
- ChangedThe Computer entry's Access switch moved into the collapsible header and, like the Browser entry, the section cannot expand while access is off (#493).
- ChangedThe Browser entry keeps its Browser Access switch in the collapsible header and refuses to open while the switch is off; the body is now a clean tab list with a focused preview that follows the Bot by default (or a tab you click), and Bot tabs open as background tabs in the shared Bot Browser without popping windows or stealing focus. The former Takeover control is now Pause Bot, which stops the Bot without implying you need permission to use the window (#490, #492, #496, ADR-0095).
- ChangedMemory file readers use a distinct full-width header with quiet return and refresh controls; commit and working-tree diffs use collapsible file cards with old/new line numbers, addition/deletion counts, and the same status badges as the Git graph. The historical branch action names its create-and-switch behavior (#441, #512).
- ChangedBotHarness now declares its DSH compatibility as a SemVer range (
>=0.2.0-rc.1 <0.3.0-0) whose floor is the verified host line, instead of an exact pin; runtime behavior is unchanged (ADR-0087, #423). - ChangedBotHarness now targets DSH 0.2.0 RC1: workspace pins and
engines.dshmoved from 0.1.7 RC2, and isolated development Profiles must be recreated for the new RC (#419). - ChangedUnpinned Group and PersonaBot DM Channels now share a conversation-row layout with an avatar, name, and latest-message preview; empty Channels show a short placeholder. The unpin drop hint has more breathing room, and an active Bot avatar keeps its status dot without an outer ring (#404).
- ChangedNew isolated development Profiles compose the optional
@botharness/computerbundle by default, so the Computer sidebar entry and viewer are available without hand-editing the Profile (#383). - ChangedGroup Channel messages now show a compact filled recipient pie beside each bubble. Open it to see each admitted PersonaBot by name and avatar as delivered, read, processing, handled, ignored, or failed; reading Channel history alone does not imply handling, and processing begins only when the message enters an Orchestrator turn, and a Bot sender is never counted as its own recipient (#345).
- ChangedDM and Group message bubbles reveal the message time, Reply, and Copy beneath the bubble on hover or keyboard focus; touch devices keep the actions visible (#345).
- ChangedCopying a DM or Group message now briefly changes that message's Copy icon to a checkmark after the clipboard write succeeds; failed writes keep the Copy icon (#376).
- ChangedA PersonaBot DM sidebar now shows its owned Orchestrator and Assignment Sessions using native DSH titles, workspace and running state; a heading menu switches Current/All and Flat/By workspace views, each Bot remembers those choices and collapsed groups in this browser, and a row opens the native Session. An owned root Session shows its Bot avatar before the idle native sidebar title and offers header and Session menu actions back to its DM (#312, ADR-0072).
- ChangedThe browser now remembers whether the last visible view was Bot mode or native DSH. Reloading a Bot view reopens its selected Channel, while returning to DSH keeps that choice on the next visit (#340).
- ChangedGroup @PersonaBot and Bot-to-Bot DM guidance now let a Bot finish without replying when no response is useful; “handled” still means its turn completed, not that it acknowledged the message (#302).
- ChangedLocal Desktop Client edits now update an open PersonaBot DM through DSH Client HMR; the unpublished UI Bundle uses
@botharness/uiso RC2 can resolve its plugin graph (#272, ADR-0066). After a full Desktop document reload following HMR, RC2 can still fail Web boot; restart the app and Host as described in the development guide. - ChangedDM headers now use the PersonaBot display name even when the stored Channel name is an ID; the right Channel sidebar no longer repeats that title (#263).
- ChangedLocal BotHarness development now supports DSH 0.1.7 RC2 Web Profiles, with automatic Client refresh and a documented Host restart path (#265).
- ChangedChannel Bot bubbles now use the former Human grey surface, while Human bubbles use the DSH theme’s inverse neutral palette with readable text, reply excerpts, and file attachments in both light and dark themes (#255).
- ChangedOperational logs gained a durable home: a lightweight
logs.dbbeside the profile (versioned schema, rebuild-empty worst case, 50k rows + 30 days lazy retention, owner-scoped reads) that the Computer diagnostics ring now drains into, so debugging survives restarts (#240, ADR-0063). - ChangedThe Computer viewer now narrates its lifecycle (mounts, stream phases, reloads, retries) into the developer diagnostics log, so a later debugging session replays the card's story without a browser (#234).
- ChangedOn web deployments, Computer export/import now runs through the browser: a Download button fetches the finished archive via the save dialog (streamed), and Choose archive file… streams a local
.tarup for import — no Host path typing, with single-use transfer tokens and an explicit note where streaming upload needs Chromium (#212). - ChangedThe Computer accepts an opt-in
dataDirfor professional Linux deployments: the persistent store bind-mounts at the configured directory instead of the named volume, with the resolved location shown on the authorize view alongside the SQLite-on-shared-filesystem risk note; off Linux the setting is ignored with a visible reason, and changing it rebuilds a stopped container on the new store while a running one is left untouched with a migration hint — previous data stays behind for manual migration (#155). - ChangedStarting the Computer now waits for the desktop web endpoint to serve (bounded at ~90 seconds) before reporting running, so the viewer no longer mounts into a dead port and shows a black connecting screen; while waiting, the entry and settings rows report the live starting stage, and a desktop that never serves fails the start with an explicit retryable error instead of a silently broken running state (#223).
- ChangedThe Computer viewer now syncs with Selkies' own session state instead of trusting canvas size alone: liveness requires a sized surface, changing pixels, and a quiet
#status-displayline — a static-but-healthy desktop still goes live after a short grace, and a stuck stream ages to the retry state — so opening the viewer no longer reports connected while Selkies is still connecting. Busy negotiation gets a patient budget instead of rushing to empty, losses remount only once persistent, and a document that never went live remounts itself a bounded number of times, so a fresh start recovers without a manual retry (#221). - ChangedThe Computer sidebar's Running card now follows the AgentScreen pattern: a framed capture that reveals a blue Open pill on hover, and a fullscreen viewer whose title bar carries the Bot name, live status, stop, and collapse — the toolbar button is the only way back, the page scroll is locked, and a single iframe only toggles geometry between the card and the overlay so opening the viewer never re-handshakes the stream. Entering shows a connecting state, sustained silence becomes an explicit no-picture state with retry, the start view hides bare exit-code reports behind the shared note, and all chrome colours read DSH design tokens or primitives so light and dark themes both render correctly (#167).
- ChangedComputer export now closes the browser gracefully before packing the volume (bounded at ~10 seconds, falling back to a plain stop), and every start seeds the durable
~/workspacedirectory, so a migrated profile opens with flushed logins and tabs and bot work files travel with the archive (#154, ADR-0062). - ChangedDuring an export or import, the Computer settings rows and the sidebar card show the live stage with elapsed time instead of a generic busy label (#154).
- ChangedThe Computer's settings rows — export directory, idle stop, export/import — now render under their own Computer section heading on the BotHarness settings page (#154).
- ChangedThe Channel header is now a floating, clickable name island over a fading message timeline; it opens the Channel sidebar, whose top heading no longer draws a divider (#156).
- ChangedThe Bot icon chooser is a grid of cards that show each mark, with the selected one outlined, instead of a selector that only names them (#178).
- ChangedBotHarness copy now follows the DSH language everywhere, not only in Settings: the roster, section management, PersonaBot creation, the Channel sidebar entries, the composer, and activity states all render English when the interface is English (#184).
- ChangedThe app sidebar's Bot mode switch stands taller with a larger mark and label: clicking the row again leaves Bot mode, and hovering reveals a settings gear that opens the Settings dialog on the Bot section (#177).
- ChangedBotHarness now has its own Bot mark: the app sidebar's BOT-mode entry and the Bot settings section's navigation show the DeepSeekBot mascot (light and dark artwork), and the new Bot icon row switches it between the mascot, its simplified variant, a generated blob, or a generic bot glyph (#178).
- ChangedBotHarness preferences now live in their own Bot settings section in the Settings dialog — the motion and BOT list sorting rows moved out of the native General page, and the Computer's settings, export/import, and resource bounds will follow there (#177).
- ChangedThe Computer now pulls the upstream webtop image (XFCE with Chromium) instead of a BotHarness-built Chrome image, and runs under explicit resource bounds — 2 CPUs and 2 GiB memory by default, swap pinned to the limit, 512 MB shared memory, 4096 processes, and a 30-minute idle stop, all overridable per Host: the image shrank by ~470 MB and resting memory fell from ~2.4 GiB to ~1.15 GiB (#150).
- ChangedThe Computer desktop now opens at viewer-friendly chrome sizes — a taller top bar with larger icons and a taller bottom dock — seeded only over stock values, so a Human's own panel customization is never overwritten (#150).
- ChangedPersonaBot Agents now join an agent preset (
standardby default); the Orchestrator can persist memories directly through its Memory-scoped file tools, while opaque native tools ask for one-time Human approval through the Workspace Grant boundary; the Orchestrator now records memory itself and delegates only independent work, while Assignments report memory-worthy findings instead of writing the repository (#115). - ChangedThe Orchestrator now starts Assignments without waiting:
create_assignmentreturns its Session id immediately, a continuity key reuses an idle Assignment instead of creating another, and Assignment reports and questions arrive through the Bot Inbox where an answer resumes the waiting Assignment (ADR-0059, #180). - ChangedPersonaBot creation now provisions a real Git-backed Memory Repository and the Orchestrator Session runs inside it; reopening a repository never auto-commits a provisional working-tree edit (#115).
- ChangedRemoved the model-visible
memory_read,memory_search,memory_write, andmemory_listtools; V1 uses Grant checks on DSH native file tools; opaque Shell and code calls require one-time Human approval when available (#115). - ChangedA Session freezes its persona when it first assembles a system prompt, so a Human edit to
PERSONA.mdreaches new Sessions while a running Session keeps its original prompt prefix (ADR-0060, #115). - ChangedPersonaBot DM and group Channels can now be hidden from every roster navigation surface and restored from a searchable
More → Hidden channelsmodal without changing their pin, section, order, messages, PersonaBot, or Memory state (#137). - ChangedChannel and section context menus now expose the same organization controls as drag-and-drop: sections can move up/down, rename, or be safely removed; every group or PersonaBot DM Channel can pin/unpin, move to an existing or newly created section, rename, or hide. Renaming a DM updates the PersonaBot display name while stable internal identifiers remain unchanged; true Channel/PersonaBot deletion remains deferred to #138 (#10).
- ChangedGroup Channels and PersonaBot DMs can now be pinned by context menu or drag. An empty pin target stays hidden until a Channel drag begins, then transitions open; dragging a pinned card reveals a dedicated dashed target that unpins and restores its prior placement, while dropping on a specific Channel, section, or section gap unpins it at that predicted position. Ordinary roster whitespace is not a drop target. Legacy PersonaBot-slug pins migrate to Channel ids (#10).
- ChangedThe collapsed BOT-mode sidebar now projects every ordered Channel into its 36px rail: pinned Channels appear first behind a divider, followed by the same flattened section/loose order; PersonaBot DMs keep their avatars, group Channels use the hash glyph, and the native hover card shows identity plus the latest message preview (#10).
- ChangedSession listing and PersonaBot activity now resolve through explicit durable Session ownership, including fork and Subagent lineage, instead of cwd or workspace membership (#80).
- ChangedSection headers can now create either a group Channel or a PersonaBot DM directly inside that section, and newly created sections, loose Channels, and section members default to the first position in their scope (#10).
- FixedOpen Profile identity and Channel connector tables now refresh after identity or Grant changes and when reception connects or fails, without a manual refresh (#855).
- FixedAfter Host restart, previously executing Assignments now produce one safe recovery notification for their PersonaBot, preserving original Reports and avoiding automatic Assignment replay; handled notifications are not recreated on later restarts (#194).
- FixedA native Assignment execution error now produces one safe Host notification for its PersonaBot and releases its Continuity Key, preserving the original progress Report without retry or replay after restart (#194).
- FixedHuman cancellation of a running Assignment now delivers one Host-origin Bot Inbox notice, preserving the original Report and native Turn identity without automatic retry; handled facts survive restart (#194, ADR-0045).
- FixedFixed Slack Channel connectors and member reminders showing Lark-only labels or defaults (#845).
- FixedAssignment answers retain their original question until native Inbox acceptance; proven delivery preparation failures remain retryable, uncertain delivery stays visible for repair and older answers cannot clear newer questions (#812).
- FixedHuman Inbox action buttons now open the same split detail view as the row; titles span the full first line above summaries and actions, and compact-entry dialogs have more room (#812).
- FixedIdle Assignment continuation and keyed reuse now respect the same profile-wide concurrency limit as new work, preserving unanswered questions when capacity is full (#811).
- FixedChannel sidebar edit mode omits expansion chevrons and supports dragging the whole row; dragging now previews the actual draft order with a clear insertion line, accepts row labels as drop surfaces and restores the pre-drag draft on cancellation (#808).
- FixedFixed Container Computer panel sizing on the first start of a fresh home store, preserving existing custom preferences and using the configured storage (#797).
- FixedFixed Browser Stop and idle shutdown to revoke affected Session authorization before cleanup, so a pending approval cannot restart the stopped profile; cleanup failures retain a visible Stop recovery path and later idle retries remain possible (#768).
- FixedQualified the full IM fork for bounded context reads that discard pending results after consumer release or Provider replacement, preserving existing file, echo and independent-responder capabilities without waiting for an upstream merge (#789).
- FixedConcurrent PersonaBot Tool activity now orders opaque detail references before bounding them, so the same active set produces the same lookup references regardless of arrival order (#123).
- FixedGroup Profile member message activity identifies external traffic by its platform and source group name, combining senders within one source while keeping different sources separate (#769).
- FixedNumeric PersonaBot avatar badges remain fully visible in the collapsed app Rail, including the first and pinned Channel rows, without changing native sidebar scrolling (#744).
- FixedmacOS Local Computer now resumes fresh observations after driver idle expiry, while expired snapshot and element tokens remain invalid (#713).
- FixedComputer Audit now records driver-returned tool failures as errors, so refused screenshot and window requests no longer appear successful; observation content stays out of Audit (#708).
- FixedInbox source avatars remain at the far right of every action row; repair-only Bot Inbox maintenance is available inside details without an extra list button (#687).
- FixedInbox details load older/newer context from flush edge controls, expose exact source links on message hover/focus and persist Dismiss without answering or authorizing the source request (#687).
- FixedInbox list “Choose workspace” now opens the same DSH folder picker directly without expanding the event; other response actions use an independent dialog, cancellation can be retried and resolved requests do not trigger authorization (#687).
- FixedComputer Settings opens the native directory picker correctly, keeps the authorized export destination for the next import, and retains manual path entry when a picker is unavailable (#166).
- FixedBot activity recovers through bounded snapshot refresh when live transport fails; reconnects and revision gaps restore shared sidebar/composer state without treating connection errors as Bot activity (#121).
- FixedFixed Memory edits being silently absorbed when a new DM or Group mention steers an active turn; bounded change summaries now enter that turn’s Bot Inbox and settle with it (#528).
- FixedBrowser entry now expands when Access is enabled, pins the Bot’s current tab with visible title/URL, and holds the viewed tab when Follow is off without redirecting Bot work (#492).
- FixedBrowser file uploads select the input that opened the picker, or the first input when ref is omitted; upload audits include basename and size and redact Host paths in failures (#491).
- FixedPersonaBot Orchestrators can set and restore Human DM, Bot DM and Group mention delivery through the existing attention tools; changes keep immediate admission and carry Bot-authored revisions visible in Profile (#528).
- FixedFixed concurrent first use by several PersonaBots sharing a Browser profile: they now wait for one Chrome startup, and a failed startup permits a fresh retry (#463).
- FixedFixed recovery after a Human closes a Bot Browser tab: missing CDP Sessions now clear the closed current tab and return an instruction to select or open another owned tab (#463).
- FixedHuman DM, Bot DM and Group mention delivery settings now save from PersonaBot Profile, so switching between steering the active Turn and queuing a separate Turn takes effect and survives restart (#528).
- FixedBackground Bot Browser tabs now prepare native mouse and keyboard input without bringing the Human window to the foreground, so a search can open its first result before any screenshot or scroll (#462).
- FixedBrowser actions and navigation now report a readable timeout when the page remains unsettled for 15 seconds, and direct the Bot to observe before retrying an action that may already have run (#462).
- FixedSending a DM while reading earlier messages preserves the reading position; following the latest conversation still keeps new messages visible as Bot activity opens (#120).
- FixedBrowser screenshots started before Human Pause are now refused if control changes during capture or native attachment processing, so unfinished images cannot reach the model after takeover (#461).
- FixedTurning off Browser Access cancels active waits and refuses unfinished or queued calls from the revoked registration, including after Access is enabled again; existing Bot Browser tabs remain available to the Human (#460).
- FixedDM activity now updates the sidebar and composer together from the actual Host Session projection; active turns show thinking or working and settle to idle, while delivery receipts keep their independent processing result (#536, #120).
- FixedBrowser uploads now honor an observed file-input ref instead of attaching to a different field on multi-input pages, so the intended form can continue (#652).
- FixedGroup departure now reports a committed change or an idempotent
not-memberno-change; missing Channels and non-Group targets fail explicitly, so repeated or rejected requests cannot fabricate a new departure (#571). - FixedBrowser scrolling now sends a native wheel at the viewport center, so the Bot can move central nested content as well as ordinary pages and observe the result before continuing (#647).
- FixedBrowser typing now refuses readonly and disabled inputs and textareas before changing values, focus or events, including native disabled-fieldset inheritance; the Bot retains its current tab and can continue with an editable field (#644).
- FixedBrowser key presses now perform native focus movement, editing and form submission; unsupported keys return retryable errors instead of reporting success (#640).
- FixedBrowser navigation failures now return retryable Tool errors and error Audit outcomes; failed new tabs are cleaned up while an existing current target remains available for observation and retry (#627).
- FixedFixed retained model-token statistics being cleared when Session histories are missing: restart and reconciliation preserve daily totals, durable receipts prevent duplicate replay, archive preserves usage, and PersonaBot Purge removes its usage (#502). Existing aggregates migrate as a retained baseline; pre-upgrade attempts cannot be backfilled independently when their prior accounting is unverifiable.
- FixedSelecting a Bot Browser tab that a Human has closed preserves another live current tab and its preview; the missing tab is removed with recovery guidance, while transient lookup failures leave selection intact (#623).
- FixedAfter Human Resume, Browser page interactions require a successful fresh observation; reads made during Pause or before a Pause/Resume transition cannot authorize actions on Human-modified content (#600).
- FixedRefused Browser tool attempts now produce one attributed Browser Audit error entry, including authorization, Access, Pause and post-Resume observation checks; typed text and upload paths keep their existing redacted summaries (#604).
- FixedBrowser Profile changes reject the reserved names
.and..before saving or resetting work, preserving the current tab and Pause state; invalid stored names keep the runtime’s existing default fallback (#611). - FixedChanging a PersonaBot’s Browser Profile clears its previous tab selection and Pause state, so work can start in the newly assigned profile without resuming unrelated old-profile work (#595).
- FixedBrowser Access can be disabled and re-enabled without losing a PersonaBot’s existing work tabs or current page; tools remain unavailable while Access is off (#591).
- FixedFixed Open Bot Browser to reveal the owned preview tab and restore minimized windows, reusing one owned blank tab when no live work remains (#584).
- FixedFresh Browser observations replace the previous refs with an independent namespace, so an older ref cannot click a different control after page changes; role-less click targets stay visible on repeated observations and stale refs retain the readable re-observe refusal (#579).
- FixedLegacy PersonaBot model choices migrate only when one available provider matches; ambiguous or unavailable routes stop new requests and direct the Human to repair the Model Preset in Profile, without switching providers (#500).
- FixedQueued Browser actions recheck Browser Pause and Browser Access when execution starts, so a Human pause or revoked access blocks actions already waiting behind another operation while paused observation remains available (#569).
- FixedScreenshots report the image size next to the viewport, so coordinate clicks state the exact conversion when the device scale factor is not 1 (for example 2x on Retina), and the viewport guard now uses exclusive bounds (#538).
- FixedBrowser observation now finds role-less toolbar controls inside editor containers and gives unlabelled ones position-tagged names (
div @x,y); coordinate clicks outside the viewport fail with a re-screenshot instruction, and screenshots report their viewport size so coordinates map 1:1 (#530). - FixedThe Computer viewer now remounts its stream after three consecutive lost samples, then makes at most three automatic attempts before showing the no-picture retry control; manual retry can recover the live desktop (#456).
- FixedRecoverable browser tool errors (for example a page whose file input does not exist yet) no longer make a PersonaBot forget its current tab and reopen a new one; only a genuinely closed tab drops the bookkeeping, and
browser_uploadnow waits briefly for the page to create its file input after clicking the upload control (#523). - FixedThe Bot Browser no longer stops itself seconds after the Human opens it: opening, watching the live view, and taking over in the Browser entry all count as activity, so the idle sweep only stops a genuinely idle browser (#486).
- FixedThe Bot Browser launches without the automation marker (
navigator.webdriveris false), so Human sign-in on sites that reject automated browsers, such as Google and X, works (#483, ADR-0089). - FixedPersonaBot activity heatmap tooltips now stay beside the hovered or focused day in wide and compact Profiles (#478).
- FixedThe Computer viewer now connects to current Selkies desktops through their
/api/websocketsendpoint while retaining the older paths, so a started desktop no longer stays on the connecting screen (#451). - FixedChannel composers now accept pasted images and files through the existing attachment queue, show images as square previews with a full-size lightbox, and keep other files in compact type-labelled chips before and after sending; the add-media button and placeholder are easier to see in light and dark themes (#433).
- FixedThe docked Channel sidebar now stays in place while switching Channels or opening a PersonaBot DM, so the Channel body no longer shifts while the next conversation loads (#430).
- FixedPreviously opened Channels now show cached history and sidebar data immediately while refreshing in the background; first visits show skeleton placeholders in the Channel body, app sidebar, and Channel sidebar (#434).
- FixedThe Channel composer now shows the blank line immediately after one Shift+Enter and stays steady when a long single line reaches its wrap width (#393).
- FixedGroup join requests for a Bot-owned Group and Human accept/decline decisions now reach the recipient's Bot Inbox instead of remaining in Needs repair after the Orchestrator turn (#367).
- FixedGroup messages sent while a PersonaBot is archived stay in Channel history but create no new Inbox Admission or wake for that Bot; active members still receive their own messages (#47).
- FixedRevoking a Workspace Grant now expires pending native-tool approval cards in the PersonaBot DM and removes their action buttons immediately. The access list loads independently of secondary sidebar data, and stalled updates recover after a timeout, so a stale card cannot be approved after access is removed. Calls already executing may finish; subsequent Assignment access remains blocked (#116).
- FixedA PersonaBot can list its own Memory directory with the literal read-only
ls -lacommand without an interruption; other shell commands still use Channel approval (#298). - FixedSelected Group @PersonaBot references now appear once inside the composer and sent message, delete as a whole token, and remain visible as Bot text in Orchestrator Sessions instead of showing DSH's file icon (#254).
- FixedPersonaBot creation now explains when Git is missing and leaves no partial identity; install Git on PATH and restart DeepSeek Harness before retrying (#268).
- FixedFixed fresh BotHarness database initialization on Windows so the official DSH RC2 Desktop can add a local Workspace and create a PersonaBot without entering recovery mode (#266).
- FixedFailed Orchestrator and Assignment turns now leave a durable notice in the PersonaBot DM with a localized summary and DSH error code; provider diagnostics and Session identity expand on demand, while credential and quota failures link to model settings (#116).
- FixedFixed Computer export end-to-end on deployments whose directory picker rejects (e.g. web): the export directory falls back to a built-in default (
~/Desktop/BotHarness Exports, or~/BotHarness Exportswithout a Desktop) shown read-only so no path has to be typed, the row keeps tracking that Host-resolved path while the settings scope is still empty (Open folder / export / import stay enabled against it), a failed picker switches to the fixed directory and continues the export, and the folder opens in the Host's file manager when the export finishes; on picker deployments, saving a typed path shows progress plus success/failure notes, rejects relative paths, and surfaces a Host-refused write as an error instead of a false success (#154). - FixedThe local QA launcher now recognizes an existing DSH profile credential and can adopt its DeepSeek key once into a private machine-local source, so every new AX-launched profile works without re-entry; the AX runbook requires a real DM reply to prove availability (#218).
- FixedFailed Human Channel sends now keep a visible failed bubble; retry restores the original text and attachments to the composer for explicit resubmission, and Client message IDs make response-loss retries idempotent at the Host (#206).
- FixedReply-quote navigation can now continue loading newer timeline pages by ordinary downward scrolling until it reaches the latest message (#207).
- FixedCommitted Channel placement changes now invalidate the roster in other open windows; drag previews remain local and remote windows re-read only authoritative committed state (#208).
- FixedPersonaBot Orchestrators can read a Channel image on demand through an attachment reference after trusted membership, message-reference, MIME, and size checks, without guessing Host file paths or injecting all historical images into context (#209).
- FixedThe multiline Channel composer gives the input the full upper row and places attachment/send controls in a stable bottom footer; only the first one-line-to-multiline expansion animates, while later line growth is immediate (#148).
- FixedFixed the newly created PersonaBot DM so its first Human message can be sent immediately without reselecting the Bot or refreshing the page (#186).
- FixedPersonaBot DM now previews a reply as the Orchestrator streams an explicit
channel_sendcall, then replaces it with the committed Channel message; other committed messages appear without refresh, and reconnects replay missed history (#141, ADR-0054). - FixedA running turn no longer reports
needs-repairwhile a side effect is in flight; an interrupted attempt is reconciled at boot (side effect started → reconciliation, otherwise retryable) (#115). - FixedFixed a pinned Channel drop onto a specific loose position so its preserved pre-pin
topOrderentry is removed before the predicted position is inserted; unpinning and placement now commit together instead of returning the Channel to its old slot (#10). - FixedAligned the hidden-Channel recovery Modal with the native DeepSeek 380px/24px-inset geometry, tightened its search/list spacing and rows, ordered recoveries most-recently-hidden first, added a 180ms search debounce, and made the whole non-Channel area of a section—including its name label—open the section context menu (#10, #137).
- FixedMade PersonaBot DM Channels follow the same section, loose-placement, drag, and move rules as group Channels while retaining their avatar contact rows (#56).
- FixedFixed flat-order drag commits so an unpinned PersonaBot DM can persist at the absolute top or between Channel sections exactly like a group Channel (#56).
- FixedChannel messages no longer wait for the PersonaBot's Orchestrator turn: a Human message appears immediately, can be sent while the bot is still working, and is admitted to the Bot Inbox for serial processing (#140).
- FixedFixed the Computer's Chromium losing its open tabs across stop → start: the desktop now launches Chromium on boot and restores the previous session, so tabs survive a restart the same way they survive export → import (#150).
- FixedCorrected Channel attachment send guidance to name the registered bounded-read and local-result import tools, so PersonaBots can follow the existing file workflow without a nonexistent tool reference (#677).
- FixedPreserve definite checked IM source-not-found and reply-permission refusals as failed replies instead of unknown outcomes; genuinely unknown sends and previously recorded outcomes remain unchanged (#855).
- DocsDocumented the accepted Bot Marketplace order, starting as a GitHub-indexed catalog: repositories opt in with the
botharness-bottopic, a Cloudflare Worker/D1 crawler powers search in a harness modal, and Install reuses Git-URL Bot creation; accounts, uploads, favorites and import counts follow in a second phase (#18, ADR-0131). - DocsThe README and npm page now match the pixel-art website, with its share cards, desktop and CLI install, shipped IM platforms, pixel avatars and community links (#895, website).
- DocsDocumented the accepted PersonaBot/Channel deletion contract: an unchecked optional Memory-erasure choice with direct folder access, history-preserving Channel deletion, and the real Purge Ledger prerequisite for Profile restore; runtime controls remain separate implementation work (#138, ADR-0130).
- DocsAdded a bilingual Channel sidebar chapter with seven illustrated feature guides for Memory files/history, owned Sessions, Bot Inbox, Workspace Grants, local group management and display controls (#893, guide).
- DocsUpdated Discord integration guidance with merged QA revisions, bounded send-interruption/recovery evidence, agent-operated UI/E2E screenshots, real Gateway redelivery without duplicate admission/reply, native refusal checks and explicit remaining qualification paths (#855, verification).
- DocsAdded illustrated public npm installation, API / per-Bot model setup and non-IM settings guides with a user-focused Quickstart, verified with DSH 0.2.0 RC1 and deepseekbot 0.1.0-alpha.1 (#887, guide).
- DocsDocumented the proposed Profile Backup / Restore / Transfer UX, including validation, repair and explicit activation; the UX is accepted and runtime implementation is tracked separately (#76, proposal).
- DocsAdded an illustrated bilingual Slack connection guide covering App setup, identity binding, channel authorization and real same-thread replies (#874, guide).
- DocsDocumented preparation and explicit publication of reviewed npm prerelease artifacts, including integrity checks, dependency order and partial-publication recovery; no public release is claimed (#866, operator guide).
- DocsDocumented explicit recovery of an already started npm prerelease after main advances, retaining the original reviewed source and refusing conflicting published bytes (#877, operator guide).
- DocsRecorded the fixed-source Discord mention/reply preflight and missing real-App qualification; Discord capability rows remain unqualified and runtime behavior is unchanged (#855, integration guide).
- DocsDocumented the verified Lark/Slack IM integration boundary and repeatable qualification workflow for future providers (#845).
- DocsAdded a Lark / Feishu beginner guide with compressed WebP captures of the actual console and connected Profile, a captioned step-by-step video, and qualified single-install, identity, group authorization and message-source checks (#814, guide).
- DocsAdded a verified Assignment Report batch guide, with native harvest evidence, retained source history, cold Host restart acceptance and Human source-navigation checks (#194).
- DocsAdded a verified Assignment stop and recovery guide, including pending approvals, persistent stopped state and new work after Host restart (#81).
- DocsDocumented current Computer deployment/image choices, durable workspace and export recovery limits with real Docker verification (#205, report).
- DocsDefined Avatar Family and Avatar Appearance, with separate ownership for editable appearance, shared activity facts and transient renderer poses; runtime behavior is unchanged (Context, ADR-0116, #743).
- DocsAdded a compressed multi-bot concept illustration to both README introductions, keeping it clearly labelled alongside real product screenshots (#643).
- DocsReplaced the early milestone README with bilingual product screenshots, current source-preview setup, and explicit Computer/Browser authorization (including Auto-allow) and temporary-fork IM delivery boundaries (#643).
- DocsDocumented the local Human naming target: a plugin-wide default, per-Channel roleplay nicknames, and stable-ID mentions displaying current Human or PersonaBot names; runtime implementation remains subsequent work (ADR-0103, #126, design).
- DocsDocumented the verified Lark work-group mention and checked topic-reply contract, separate Feishu/Lark permission limits, and a repeatable sandbox with public E2E evidence; PersonaBot ingress remains subsequent work (#78, research).
- DocsDefined native file-open menus for Memory, later Workspaces and message attachments, with truthful Host targets and ordinary editable destination files without attachment version retention or edit-triggered Bot wakes; attachment migration remains subsequent work (ADR-0100, #572).
- DocsDefined Activity Center as an operational Overview plus a personal Human Inbox for Channel unread, mentions, and inline actions; a Human's all-Bot Group mention reuses ordinary direct-mention delivery. Runtime behavior is unchanged (#126, #541, #542, ADR-0098, ADR-0099).
- DocsDefined deployment-local Model Presets as per-PersonaBot snapshots and retained per-model token statistics across ordinary Session deletion; implementation follows in separate runtime slices (#488, #39, ADR-0093, ADR-0094).
- DocsDocumented the in-harness Client interaction contracts for Channel continuity, roster moves, DSH shell integration, and HMR; runtime behavior is unchanged (guide, #452).
- DocsRecorded the Browser use design: a profile-scoped managed Bot Browser with per-PersonaBot Browser Access, session-scoped Browser Authorization, a redacted Browser Audit, and window-scoped Bot Tabs; runtime behavior lands in the tracer (#459, ADR-0089, ADR-0090, ADR-0091).
- DocsDocumented that cross-device Memory continuity is agent-mediated Git plus Portability; no first-party sync Skill, Host-owned remote, or credential handling is added, and runtime behavior is unchanged (ADR-0084, #398).
- DocsRecorded the Computer Target design: the shared Computer is profile-scoped with
local(the machine running DSH) as the default andcontainerfor headless hosts such as a VPS, set once in Bot settings while per-PersonaBot Computer Access stays in the Channel sidebar; Bot Screens are window-scoped surfaces first (per-PersonaBot workspaces, sequential by measurement) with per-PersonaBot displays as an experimental opt-in whose cost playbook lives in the multi-display research (#386, ADR-0081, ADR-0082). - DocsRecorded the Computer-use integration design: the official
ctx.computerUseseam with a BotHarness-owned tool provider, a curated tool surface with progressive discovery, per-PersonaBot Computer Access (default off, scoped injection), session-scoped Computer Authorization with a profile auto-allow switch, and a redacted Computer Audit; runtime behavior lands in the tracer (#386, ADR-0079, ADR-0080). - DocsClarified Group catch-up semantics: a direct mention or due digest selects bounded same-Channel pending context with an oldest-first share, while only messages included in a successful Orchestrator turn become handled; runtime behavior is delivered in #364 (ADR-0070, ADR-0074, ADR-0077, #362).
- DocsRecorded the group-and-attention design: invitation-first membership with default auto-accept, four Channel attention presets (
all/digest/mentions/silent) owned by the Bot with Human override, a PersonaBot-managed attention policy behind Host-owned safety gates, turn-time harvest instead of one turn per event, and Inbox handling classified by Source class rather than platform (ADR-0073, ADR-0074, ADR-0075, ADR-0076, ADR-0077, #358). - DocsDocumented Bot-to-Bot DM Channels, Human DM contact mentions, and Bot-managed Group invitations as a future collaboration design; runtime behavior is unchanged (ADR-0065, #278).
- DocsDocumented how coding-agent tasks sharing one GitHub account claim issues and carry task provenance through commits and PRs (#196).
- DocsDocumented the Channel sidebar as Bot mode's scoped right region with one ordered, collapsible entry seam, retiring PersonaBot navigation (ADR-0053, #156).
- DocsAdded the canonical Release Ledger, bilingual parity checks, and contributor guidance (#100).
- DocsDocumented the planned PersonaBot DM navigation and renamed the application-defined Work concepts to Assignment, Assignment Session, Assignment Agent, and Assignment Directory; this records design language and does not claim the UI or runtime is implemented (#109).
- DocsPublished a bilingual Development status page that keeps the DeepSeekBot and DSH Skill release trains separate from the Changelog (#105).
- DocsDocumented Memory as an optional Git-backed Cordis Service, keeping the DM → Orchestrator → Assignment path independent of Persona and Memory (ADR-0047, #74).
- DocsQualified the development-source Discord mention/reply tracer with real native App/Bot identity and wrong-guild refusal, fresh recovery and screenshots; other capabilities and the product Provider pin remain separate (#855, verification).
- DocsMoved the DeepSeekBot user guides to deepseekbot.botharness.ai/en/docs (Chinese at /docs); every former botharness.ai guide URL redirects to the same guide there, and developer docs stay on botharness.ai (#914).
- BreakingCallers of the exported
createRosterStorefactory orRosterStoreconstructor must pass the ProfileOperationalDatabaseOwnerasdatabase;attachonly imports the legacy domain once and command/query contracts remain unchanged (#885). - BreakingCallers of the exported
createPersonaBotRegistryfactory must pass the ProfileOperationalDatabaseOwnerasdatabase; Registry commands and queries retain their interfaces, and implicit JSON-backed construction is removed (#884). - BreakingCustom
BotAgentAdapterimplementations must handle an absentOrchestratorAgentRun.inboundChannelIdfor external-only Inbox turns; choose an authorized local Channel explicitly when sending locally (#12). - Breaking
channel_sendTool acknowledgements change from prose to{channelId,messageId}JSON; consumers must read those fields. Attachmentsizeis now declared asinteger, matching the already-enforced safe nonnegative integer contract; new sends use the current four-field fileId reference; obsolete hash results must be refreshed from their owning message after #577 migration (#570). - BreakingCustom
BotAgentAdapterimplementations must return{ outputLimit, contacts, nextCursor? }from Orchestratorchannels.contacts(input?), with stable IDs underbotIdinstead ofslug; thelist_bot_contactsTool now returns that bounded page, so consumers must follow continuation (#568).
Development history
6 changes
Consolidated the implemented foundation and public documentation that preceded DeepSeekBot's first release; this is development history, not a released or installable version.
Work before the first npm release; it has no installable package.
- AddedHumans can open the current Memory Repository, nested directories and files on the Host through DSH application menus, reveal a file, copy its Host path, or download its full current bytes to the browser device; ordinary file selection still uses the reader (#574, ADR-0100).
- AddedPersonaBot creation now offers an empty Memory Repository or an HTTPS/SSH Git import. The Host checks Git, clones into staging with its existing credentials, and only creates the Bot after a successful clone; failed imports leave no Bot (#298).
- AddedAdded durable PersonaBot identity, file-based Memory tools, and the BOT-mode creation flow (#22, #98).
- AddedAdded the BOT-mode Channel shell, roster sections, per-scope sorting and drag movement, with durable Host-side arrangement (#51, #64, #72, #73, #95).
- ChangedAligned the plugin manifest, configuration path, and client bridge with the verified DSH contract (#27).
- DocsPublished the bilingual documentation site with maintained BotHarness architecture and product language, plus a stable DSH/Cordis Context and Decision Tree for plugin developers (#26, #88, #90, #92).