v1.13.1
Release Notes - Mint Agent v1.13.1
A reliability-and-polish release: scheduled tasks no longer lose a run when
the app is closed mid-execution, the five management pages (Scheduled Tasks,
Skills, MCP Servers, Plugins, Linked Folders) were rebuilt as one consistent
list-style UI, typing a ~/… path when linking a folder finally works, the
web UI's "Browse…" button now opens a real folder picker, Settings' General
and Plugins tabs were cleaned up (and image generation gained per-provider
model pickers), the half-finished Custom Workflows feature was removed, and
a new /init command writes an AGENTS.md for the project.
This build also adds a local-first cross-session memory (a structured facts
table plus full-text recall of older messages), corrects the per-provider
context-window sizes and makes the local ones configurable, raises the
context-compaction trigger so long tasks keep more verbatim history, brings
the chat composer's up/down history, persistent per-conversation drafts, and
edit-and-resend to Web and Desktop, finishes the Settings component restyle
(segmented pills / bordered toggle cards) across the remaining tabs, and
gives the CLI's interactive prompt readline-style editing keys plus prompt
history that survives a restart.
Reliability & Polish: File Reading Pagination, Web Layout & Local Timezone Synchronization
-
Reliable
read_fileTool Pagination:- Dynamically calculates default
endLinefromstartLine.saturating_add(239)instead of hardcoding a static 240, eliminating 1-line pagination lockups when continuing reads past line 240. - Enforces a minimum 240-line pagination chunk recommendation in
read_code_filecontinuation tips. - Supports both camelCase and snake_case parameter names (
startLine/start_line,endLine/end_line) across Serde deserializers, CLI status labels, and Desktop/Web activity views. - Generates distinct action fingerprints for distinct line ranges of the same file to prevent false-positive duplicate action warnings.
- Dynamically calculates default
-
Web Layout Grid Resilience for Split Views:
- Preserved direct
<section className="conversation-panel">root rendering in standard chat mode, restoring CSS Grid full-width layout (grid-column: 1 / -1) in Web and model-hidden desktop environments. - Added dedicated
.chat-panel-split-wrapperstyles ensuring responsive 50/50 split width and zero layout collapse when Live Artifact Previews are active.
- Preserved direct
-
Cross-Platform Local Timezone Synchronization:
- Normalized SQLite UTC timestamps (
YYYY-MM-DD HH:MM:SS) to ISO 8601 with explicitZUTC indicators inmint-core::memory. - Added client-side
parseUtcDatehelper accurately translating UTC database records to the user's active local timezone across Web and Desktop chat bubbles, session dividers, and search groups. - Formatted CLI
/historytimestamps usingchrono::Localfor unified time display across all three surfaces.
- Normalized SQLite UTC timestamps (
UI & Workspace Experience: Live Artifact Preview, Subagent DAG & Universal Command Palette
Comprehensive UI and workspace upgrades with strict platform parity across CLI, Desktop, and Web:
1. Live Artifact / Web Preview Split View
- Side-by-Side Live Preview (
ArtifactPreviewPanel.tsx): Split view alongside the chat panel to instantly inspect HTML, SVG, Markdown, and Web components generated by the agent. - Preview & Code Tabs: Easily toggle between the live rendered artifact and raw syntax-highlighted source code with full line numbers and copy functionality.
- Multi-Device Responsive Viewports: Switch between Desktop (100%), Tablet (768px), and Mobile (375px) viewports to inspect responsive UI designs directly inside Mint.
- Secure Sandboxed Preview: Sandboxed iframe (
sandbox="allow-scripts allow-forms allow-modals", strictly omittingallow-same-origin) to prevent access to parent window DOM, localStorage, and cookies. - Universal Access Across All 3 Surfaces:
- Desktop & Web: Preview button on generated file cards and activity logs; live file reading via Tauri IPC (
read_workspace_file) and Web API (GET /api/file/read). - CLI:
mint preview <path>command to launch default system browser/viewer for HTML/SVG or render formatted preview in terminal for Markdown and code files.
- Desktop & Web: Preview button on generated file cards and activity logs; live file reading via Tauri IPC (
2. Subagent Visual Tree / DAG Graph (SubagentDagView.tsx)
- Interactive Node Graph: Renders the Orchestrator-to-Subagent hierarchy in real-time with visual branches, badges, and status colors (
Thinking,Running,Completed,Failed). - Tool Inspection Drawer: Click on any subagent node to inspect dispatched prompt instructions, tools executed, running commands, and return results.
- Integrated Activity Drawer: Tab toggle (Activity List vs Subagent DAG) in
AgentActivityDrawer.tsxwith a live subagent count badge. - CLI Unicode Tree Parity:
crates/mint-cli/src/agent.rsrenders subagent dispatches and tool executions with clean Unicode tree branches (├── [Subagent: name]and│ ├── [tool]).
3. Universal Command Palette (Ctrl+K / Cmd+K / /palette)
- Spotlight Navigation (
CommandPalette.tsx): Global keyboard-first launcher inspired by VS Code and macOS Spotlight (Ctrl+KorCmd+K). - Comprehensive Command Palette:
- Quick action launcher: New Chat, Toggle Plan Mode, Toggle Fast Mode, Git Rollback, Manage MCP, Open Settings, Clear History.
- Model & Provider Switcher: Instant model selection (Gemini 2.5 Flash, Claude 3.7 Sonnet, OpenAI GPT-4o, DeepSeek-V3/R1, Ollama).
- Chat & Workspace Switcher: Search past conversations and switch active workspace directories with fuzzy matching.
- Slash Command Library: Interactive discovery and execution of all registered slash commands.
- CLI Parity:
/paletteslash command provides an interactive Arrow/Enter picker for quick navigation across all core actions and tools.
Rust & Local-First Superpowers: Prompt Caching & Local FastEmbed ONNX Search
Unleashed maximum efficiency and offline autonomy in Mint Agent's core:
1. Prompt Caching Optimization (DeepSeek, Claude 3.5/3.7, Gemini, OpenAI)
- Anthropic Prompt Caching: Enabled
anthropic-beta: prompt-caching-2024-07-31on streaming and non-streaming Anthropic requests. In multi-turn sessions, the penultimate turn is marked withcache_control: {"type": "ephemeral"}to hit cached prefixes and reduce input token costs by up to 90% while cutting response latency in half. - Deterministic Prefix Layout: Maintained a stable, deterministic system prompt, tool schemas, and base instructions prefix order across turn evaluations to maximize provider-side prompt cache hits (OpenAI, Gemini 1.5/2.0, DeepSeek-V3).
2. Local FastEmbed / ONNX Runtime (100% Offline Semantic Search & Memory)
- Embedded ONNX Runtime: Integrated
fastembedwith ONNX Runtime (ort-download-binaries-rustls-tls+hf-hub-rustls-tls) intomint-coreusingBGESmallENV15(384-dimensional dense embeddings). - Fast Batch Indexing:
index_semantic_codenow batch-embeds code chunks via CPU multi-threaded inference in parallel, running 10–50x faster than sequential HTTP calls. - Graceful Multi-Tier Fallback: Semantic indexing and query search automatically try local FastEmbed first (100% offline, zero API key required), fall back to Gemini Embeddings if configured, and fall back to zero-dependency 256-dimensional feature hashing if offline prior to initial model cache.
- Fact Memory Integration:
FactEmbeddingBackendnow supportsLocalFastEmbedalongside feature-hash vectors, selectable viaMINT_FACT_EMBEDDING=fastembed.
Developer Superpowers: Interactive Diff Review, Git Checkpoint Time Machine & AST Repo Map
Elevated Mint Coding Agent to autonomous engineering standards with complete parity across CLI, Desktop, and Web:
1. Interactive Diff Review Modal (Desktop & Web)
- Side-by-Side & Unified Diff View: Added a rich modal (
DiffReviewModal.tsx) when reviewing code changes (write_file,apply_patch), allowing developers to inspect additions (+N) and deletions (-M) side-by-side with synchronized scrollbars or unified inline view. - Diff Chunk Inspection: Shows hunk headers, line numbers, path copying, and keyboard shortcuts (
Cmd/Ctrl+Enterto approve,Escto close). - Embedded in Approval Flow: Accessible directly from
<ApprovalCard>via the "Review Side-by-Side" button before committing changes to disk.
2. Git Checkpoint & Time Machine (/rewind, mint rewind, UI Button)
- Zero-Loss Non-Destructive Checkpoints: Before any mutating file tool runs (
write_file,apply_patch), Mint automatically captures a snapshot commit viagit stash createwithout altering the working directory, index, or branch state. Snapshots are protected against garbage collection underrefs/mint/checkpoints/<chat_id>/<id>. - Pre-Rewind Safety Net: Rewinding automatically generates a rescue snapshot (
refs/mint/rescue/<timestamp>) first, guaranteeing zero data loss if an accidental rollback occurs. - Universal Rewind:
- CLI:
/rewind [step]interactive slash command andmint rewind [step]terminal command. - Desktop & Web: Reusable API endpoint (
/api/checkpoints,/api/checkpoints/rollback) and Tauri commands (list_git_checkpoints,rollback_git_checkpoint). - Chat Interface: One-click Rewind button on the file changes summary card in
ChatPanel.
- CLI:
3. AST-Based Repo Map with Token Budgeting (repo_map, mint code repomap)
- Tree-sitter & AST Hierarchy: Traverses code workspaces and generates a compact, indented outline of files and symbol signatures (functions, structs, classes, interfaces, traits, enums) using tree-sitter parsers and regex fallbacks.
- Strict Token Budgeting: Configurable token ceiling (default 2000 tokens ≈ 8000 chars) ensuring the agent grasps project layout and architecture without burning context window tokens or getting trapped in exploratory
read_fileloops. - Available Everywhere:
- Agent Tool: Autonomous
repo_maptool registered in the tool catalog and agent prompts. - CLI Command:
mint code repomap [path] [--limit <tokens>].
- Agent Tool: Autonomous
Performance: Optimized Cargo Release Profile ([profile.release])
Added production release profile optimizations in the root Cargo.toml:
opt-level = 3: Maximum compiler optimizations for production builds.lto = "thin": Thin Link-Time Optimization enabling cross-crate optimization and inlining betweenmint-core,mint-cli, andsrc-tauri.codegen-units = 1: Reduced compilation units to maximize optimization opportunities across the whole crate graph.strip = true: Automatically strips debug symbols from final release binaries, reducing binary size significantly.
Performance: Parallel Streaming search_code & Early Directory Pruning
Optimized code search and file walking in crates/mint-core:
- Parallel multi-threaded search (
WalkParallel):search_codeno longer eagerly walks the entire repository into a heap-allocatedVec<CodeFile>or stats every file before searching. It now streams file paths concurrently across worker threads and searches them on the fly. - Early termination on limit: Worker threads coordinate via atomic flags to immediately halt searching as soon as the requested result limit is reached, avoiding scanning the remainder of large codebases.
- Early directory pruning (
filter_entry): Added directory filtering directly intoWalkBuilderso traversals never descend into ignored directories (target,node_modules,.cache,.git,dist,build, etc.), drastically speeding up searches on large projects.
Performance: Parallel Read-Only Tool Execution (buffer_unordered)
When an LLM model issues multiple tool calls in a single turn (e.g. reading 3 files simultaneously, searching code and the web, or retrieving diagnostic information):
- Concurrent execution: Read-only tools (
read_file,list_files,search_code,symbols,semantic_search,web_search,git_diff,git_status, etc.) now execute concurrently up toPARALLEL_READ_ONLY_LIMIT(6 in-flight at once) usingfutures_util::stream::iter().buffer_unordered(...)instead of waiting in a sequential loop. - Thread-safe progress and approval gates: Adapts progress reporting and approval checking through mutex-protected closures, preserving real-time terminal/UI feedback while executing in parallel.
- Deterministic output ordering: Completed tool results are sorted back to their original requested order before updating the conversation trajectory, ensuring prompt history remains deterministic.
⚡ Performance: In-Place Observation Buffer Reuse & Zero-Copy Step Formatting
Eliminated repeated heap re-allocations and redundant string cloning across turns of the agent execution loop:
- In-place buffer reuse (
rebuild_observation): Instead of creating intermediatetrajectory.join("\n\n")strings and newly formatted heap buffers on every turn,rebuild_observationclears and reuses the allocated capacity of theobservationbuffer across steps, streaming history directly into the buffer viawrite!with reserved capacity. - Pre-allocated trajectory step formatting (
format_trajectory_step): Formats action/result step records into appropriately pre-sized heap buffers before appending them totrajectory, avoiding multiple internal growth re-allocations as session length grows. - Reduced memory churn on long tasks: Dramatically cuts down heap allocations and memory churn during extended multi-step autonomous sessions across CLI, Desktop, and Web.
🎨 UI: Horizontal Grid Layout & View Switcher for MCP Catalog
Rebuilt the MCP Catalog picker modal across Desktop and Web:
- Horizontal 2-column grid layout (
mcp-catalog-grid): MCP server catalog presets are now arranged horizontally in 2-column cards side-by-side (mcp-catalog-card) with responsive wrapping, making full use of modal width and letting users view more servers at a glance. - View switcher (Grid ⬚ / List ☰): Added segmented layout toggle pills in the control bar to freely switch between horizontal grid mode and vertical list mode, with the selected preference saved in
localStorage. - Search input clearance: Fixed search input left padding to ensure placeholder text never overlaps the magnifying glass icon.
⏰ Fixed: Scheduled Tasks Lost a Run When Mint Closed Mid-Execution
The cron scheduler advanced a job's next_run to the following occurrence
before running it. If the host process exited during that run — the desktop
app closed, the machine restarted — the occurrence was gone for good:
next_run had already moved past it and nothing recorded a failure. Opening
the app briefly to check on a task burned one run per open, which is why a
daily job could sit at "last run 2 days ago" while looking healthy.
next_runnow advances only after the run finishes (finish_run), so
an interrupted run still hasnext_runin the past on the next scheduler
pass and simply runs again.- A
running_sinceclaim stamped before each run lets a second Mint
process (a desktop app plusmint gateway, say) skip a job another
scheduler is already running; a claim older than an hour is treated as a
dead process and the occurrence is retried rather than left stuck. - The Scheduled Tasks detail view surfaces
Running sincewhile a run is in
flight.
🧹 Management Pages Rebuilt as One Consistent UI
Scheduled Tasks, Skills, MCP Servers, Plugins, and Linked Folders each had
their own take on the same "list of things with a detail modal" pattern —
tall gradient cards tiled 2–3 across, emoji empty states, multi-sentence
explainer subtitles, and bordered pill badges that read as generic template
chrome. They now share one design:
- Compact single-column rows — scan by name, open the detail modal for
everything else. MCP Servers and Plugins keep their icon rows but stop
tiling into a grid. - Plain-text status and labels instead of pill-with-dot badges; trimmed
page subtitles; no decorative emoji in empty states. - Wider detail modal (540px → 720px) across every management page.
- Real markdown in the detail modal: a scheduled task's "Last response"
and a skill's body now render through the same renderer chat uses —
tables, stock cards, headings — instead of being dumped as raw text.
🗂️ Fixed: ~/… and Relative Paths Rejected When Linking a Folder
add_linked_folder checked path.is_dir() on the raw string before the
~/ and relative-path expansion that happens inside the safety check — so
typing ~/notes/food (exactly what the field's placeholder suggests) always
failed with "path does not exist or is not a directory". It now resolves the
path first, then checks it's a real directory, and reports the resolved path
in the error. Fixes typed input on Desktop and Web, and mint link add /
/link add in chat. The desktop "Browse…" button was unaffected either way.
📂 "Browse…" Folder Picker Now Works on the Web UI
A browser can't hand back a real filesystem path, so the web build's
"Browse…" button previously did nothing. But mint web runs on the same
machine as the browser pointed at it, so:
- New
POST /api/select-folderopens the host's own native directory
dialog (zenity/kdialogon Linux,osascripton macOS) and returns the
chosen path. - Gated to loopback callers — a
mint webinstance reachable from other
machines can't be made to pop a dialog on the server host; remote web
sessions get no button rather than a dead one. - Desktop keeps its existing native Tauri picker.
⚙️ Settings: General/Plugins Tab Cleanup + Per-Provider Image Models
The two heaviest settings tabs were still carrying pre-redesign markup — ~90
inline style={{…}} blocks between them, and hardcoded colors that broke the
light and midnight themes (a Veo model <select> was pinned to white text on
a translucent-white background).
- GeneralTab & PluginsTab now use the same section / row / card
primitives as the other tabs. The accordion chrome, plugin cards, badges,
and icon buttons all moved to CSS classes; a provider picker with many
options now spans the full row and wraps naturally instead of shrinking
into a lopsided box. - Image Generation gained a card per provider (NanoBanana, DALL·E,
Stability, Ideogram, Replicate, BFL) — mirroring the chat "Provider &
Model" section — each with a model dropdown plus its API-key field or a
shared-key note. Five new default-model config fields back it; the Rust
side already had matching fields, and each image call reads its provider's
configured model.
🗑️ Removed: Custom Workflows / "If This Then Mint"
The workflow engine was desktop-only, Unix-only (trigger detection shelled
out to ps -A), and had a single trigger type — "is process X running" —
that fired a proactive suggestion rather than running anything. Not worth the
maintenance surface.
Gone: the 15-second monitor thread, workflows.json read/write, the
Settings > Automation "Custom Workflows" section, the enableCustomWorkflows
flag, the sidebar "Workflow (Beta)" entry, the Workflow Builder panel (and a
dead standalone window), and the related Tauri commands. The /n8n slash
command and n8n MCP integration are unrelated and untouched.
📝 New: /init Writes an AGENTS.md for the Project
/init (CLI, web, desktop) mirrors Claude Code's /init: it asks the code
agent to scan the codebase and write — or extend — an AGENTS.md at the
workspace root, the file every Mint surface already loads as workspace
rules. It captures the build/test/lint commands, the high-level
architecture, project conventions, and gotchas, folding in any existing
rules file rather than replacing it.
🧠 New: Local-First Cross-Session Memory
Mint now keeps a structured memory in mint-knowledge.sqlite and pulls the
relevant parts into every turn — no external service.
factstable — typeduser/preference/projectentries with a
dedup index and supersede/retract semantics, injected live on each turn on
top of the existing recent-conversation window.- Automatic fact extraction — a turn that states a durable preference,
naming, or standing instruction now triggers a background LLM pass that
writes it into thefactstable (with add/supersede ops), so long-term
memory grows on its own instead of only via/remember. Gated by a cheap
keyword pre-filter andconfig.auto_fact_extraction(/autofacts [on|off]). - Semantic fact recall — once stored facts overflow their per-turn prompt
budget, the overflow slot is filled with the facts most similar to your
message (an offline hash embedding stored alongside each fact, no network)
instead of just the next-newest; the newest few are always kept.
config.semantic_fact_recall//factrecall [on|off]. - Per-subagent fact scoping — facts a subagent extracts are quarantined to
that subagent (agent_id) instead of polluting the shared pool. They're
injected only when that subagent runs again, shown asvia <name>in
/memory facts, and promoted to shared either with/memory promote <id>or
automatically when the main agent restates the same thing. interaction_fts— an FTS5 index over past interactions; each turn
also injects the few older messages most relevant to what you just typed
(BM25 ranked, injection-safeMATCHbuilder).- Slash commands (shared engine + CLI):
/remember [here] <text>,
/memory facts,/memory forget <id>,/memory promote <id>,
/autorecall [on|off],/autofacts [on|off],/factrecall [on|off]. - The long-dead
interaction_memories.keywordscolumn was dropped.
📏 Fixed: Context-Window Sizes + Configurable Local num_ctx
context_window_tokens() was reporting 1M for Anthropic and OpenAI — far
above what the default models actually offer, so history was allowed to grow
past the real limit before compaction stepped in.
- anthropic — 200K for every model (1M is a tier-gated beta).
- openai — keyed off the model string (gpt-4.1 ≈ 1M, gpt-5 400K,
o-series 200K, else 128K). - deepseek — explicit 128K.
- ollama / openrouter / local_openai — read a configurable
*_num_ctx
(defaults 8192 / 128K / 32768). Mint sendsnum_ctxon every Ollama
request so the window is enforced, not guessed. - Context-compaction trigger raised 0.4 → 0.75 of the window. Compaction
fires as soon as a step crosses the threshold and shrinks history before
the next request, so 0.75 keeps far more verbatim context while still
staying under the real limit. 0.4 was compacting long tasks much earlier
than necessary.
⌨️ Chat Composer: History, Persistent Drafts, Edit & Resend (Web + Desktop)
Three input conveniences the CLI already had now work in the Web and Desktop
apps:
- Up / Down history — with the caret on the first/last line and no
suggestion menu open, ↑/↓ step through your previously sent messages; the
in-progress draft is stashed and restored on the way back, and a small
History n/Nbadge shows while browsing. - Persistent drafts — unsent composer text is saved per conversation
(localStorage, debounced) and restored when you switch back or reload,
cleared on send. - Edit & resend — an edit button on each of your messages drops its text
back into the composer (caret at end, focused) to tweak and send again as
a new message. Nothing is deleted.
⌨️ Rebuilt: the / $ @ Suggestion Menu (Web + Desktop)
The command menu was reworked into one self-contained component with a
single derived-visibility model (it had grown a tangle of open/reopen
state that trapped keyboard focus in a few cases).
- Picking a command completes it into the composer and stops — like
the CLI's Tab. A separate Enter runs it; ↑/↓ bring the menu back for
subcommands. - Slash commands are grouped by category (System / Models / Workspace /
Tools), and each row shows the command's argument template. - Empty state instead of a vanishing menu: "No command matches
/xyz",
or the active command's usage once you're past its name. - Hover no longer fights arrow-key navigation; the header shows a stable
count.
⚙️ Settings: Component Restyle Finished
The pills/toggles pass from the settings redesign now covers the last tabs:
- Automation — "Browser Engine" select → segmented pills.
- Multi-Agent — "Enable Multi-Agent Collaboration" wrapped in a bordered
toggle card (it was a borderless floating row); the agent-form "Scope"
select → segmented pills, with the workspace option disabled when no
workspace is open. - General — the Web-Search (Brave / Google / SearXNG) and Video-Gen
(Veo) provider cards no longer use a radio dressed as an on/off switch;
each shows an "Active" badge or a "Set active" button.
Model-picker dropdowns with long or dynamic lists are deliberately left as
native <select>.
⌨️ CLI: Readline-Style Editing + Persistent Prompt History
The interactive prompt's input box only had character-wise Left/Right and
Backspace, and its Up/Down recall started empty on every launch.
- Editing keys every shell/REPL provides: Home / Ctrl+A, End / Ctrl+E,
Ctrl+←/→ and Alt+B/F (move by word), Ctrl+W (delete word), Ctrl+U / Ctrl+K
(delete to line start / end), and Delete (forward-delete). - Prompt history now persists to
~/.config/mint/prompt-history.json—
loaded on start, each submitted line appended (immediate duplicates
skipped), capped at the last 100.
🔓 First Run — Unsigned Build Warnings
The desktop installers (mint-agent_windows_x64.exe, mint-agent_macos_arm64.dmg)
and the standalone mint-cli_* binaries are not yet code-signed, so the OS
warns you the first time you open them. This is expected. Installing via
install.sh / install.ps1 / npm builds from source and is unaffected.
macOS — clear the quarantine flag:
xattr -dr com.apple.quarantine /Applications/Mint.app # desktop app
xattr -d com.apple.quarantine ./mint-cli_macos_arm64 # CLI binaryOr right-click the app → Open → Open.
Windows — on the SmartScreen prompt: More info → Run anyway.