You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Workbench tab and Hub-internal chat proxy retired. The Workbench tab
(SQLite-backed session history browser, timeline/summaries/redacted exports,
prompt templates, task/policy notes, diagnostics, usage summaries,
stale-session and worktree helpers) and the associated /api/workbench/*
routes have been removed. The Hub-internal chat proxy that intercepted ANTHROPIC_BASE_URL / OPENAI_BASE_URL to capture request payloads
(internal/proxy/, internal/hub/chat_proxy*.go) has also been removed;
wrapped claude / codex sessions now talk directly to the upstream API.
Side effect: Sonnet 5+ default 1M context restored under the Hub. Because
Claude Code no longer sees a rewritten ANTHROPIC_BASE_URL pointing at an
unknown gateway, it stops downgrading to the 200K cap and honours the
Sonnet 5-era default 1M context window again. No more per-model claude-sonnet-5[1m] workaround. Ollama / LM Studio routing (which legitimately
needs a rewritten base URL) is unaffected.
Temporary /api/debug/cursor-hide-log diagnostic endpoint (introduced and
removed within the v0.4.0 cycle).
Added
Grok Build CLI provider support.many-ai-cli grok (and wrap grok)
now wraps xAI's official grok terminal coding agent in a PTY, joining
Claude Code / Codex CLI / GitHub Copilot CLI / Cursor Agent CLI as the fifth
supported provider. It is handled like Cursor Agent — grok --model <id>
passthrough with no route or env injection, the shared approval-rules block
injected into the project-root AGENTS.md, and official approval patterns
from resources/approval-patterns/grok.md. /api/spawn validation,
diagnostics, slash-command/approval-pattern sources, and the model picker
were extended accordingly. Requires a SuperGrok or X Premium+ subscription; many-ai-cli never reads, stores, or proxies xAI session tokens.
opencode CLI wrapper.many-ai-cli opencode (and wrap opencode) wraps
the community opencode CLI in a PTY. Instead of pattern-scraping approval
prompts, the Hub writes the provider's own opencode.json (permission
field) into the session cwd: normal sessions get ask (surface the approval
to the Hub UI), while orchestration child sessions get allow (bypass the
provider's own approval so the conductor stays in charge). The original opencode.json is restored on session end.
Light orchestration API.POST /api/sessions/:id/spawn-child lets a
conductor session spawn child AI sessions with a role, provider, model,
initial prompt, and optional cwd. The Hub creates ~/.many-ai-cli/orchestration/<orchestration_id>/board.md, injects the
board path into the child prompt, and watches the board for appended
progress and ## DONE <role> session=<child_id> markers. When the parent
cwd is a git repository, children run in dedicated worktrees under .many-ai-cli/worktrees/<orchestration_id>/<role> by default. The Hub does
not auto-merge child branches; the conductor / user decides what to merge.
Also ships companion improvements: send-side duplicate guard, idle-false-
positive suppression, board notification path isolation, and a waitForInputReady staleguard (internal/wrapper/staleguard.go).
VT-based approval marker detection. In addition to the existing
xterm.js buffer scan, the Hub now detects [MANY-AI-CLI] markers directly
from the Hub-side VT stream (internal/hub/approval_marker.go). This
catches approval prompts that the pure xterm scan used to lose to CUP
positioning or the cursor-hide filter (a recurring class of v0.3.x bugs).
Configurable Ollama daemon base URL.ollama.base_url in ~/.many-ai-cli/config.yaml can now point Ollama routing at any HTTP(S)
daemon reachable from the Hub process, not just localhost:11434. This
supports host/guest setups such as Windows host + Hyper-V guest or Windows
host + WSL guest: /api/models reads <base_url>/api/tags, Claude Code gets ANTHROPIC_BASE_URL=<base_url>, and Codex gets OPENAI_BASE_URL=<base_url>/v1.
Mobile UX overhaul. A dedicated mobile home screen
(web/src/app/mobile-home.ts + web/src/styles/mobile-home.css), a
lightweight mobile terminal (mobile-terminal-lite.ts), and a mobile
transcript view (mobile-transcript.ts) replace the previous
responsive-only layout. The redesign covers the approval sheet, drawer,
swipe-based navigation gestures, and PWA polish (manifest, icons, service
worker updates).
Claude Code skill-derived slash-command auto-discovery. internal/hub/slash_cmd_fetch.go (discoverSkillSlashCmds) walks ~/.claude/skills/*/SKILL.md and surfaces registered skills in the Hub's
slash-command listing.
Attachment filename sanitization.sanitizeFilename in internal/attach/store.go keeps the original filename visible while
stripping path-traversal and unsafe characters from the on-disk path.
Consolidated build info.internal/hub/buildinfo.go centralizes the
version / build metadata exposed by /api/info and the About panel, so the
ldflags-injected values have a single source of truth on the server side.
Session log noise filter. A repetitive-progress-line filter is applied
when writing the clean transcript (internal/sessionstore/store.go + noise_output_test.go), so re-drawn progress bars no longer dominate the
saved .txt.
Regression tests for input splitting (internal/wrapper/input_split_test.go)
and the cursor-hide filter (web/src/app/cursor-hide-filter-fixtures.ts).
Changed
README (English / Japanese) opening hook rewritten around "run multiple AI
CLIs in parallel and approve from your phone" so the primary value
proposition is clear from the first paragraph.
Ollama routing env-var assembly now flows through EnvPresetForWithOllamaBase, deriving ANTHROPIC_BASE_URL / OPENAI_BASE_URL from ollama.base_url in one place.
Windows resource metadata (winres/winres.json and the regenerated rsrc_windows_*.syso) is bumped to 0.4.0 so the executable properties
dialog matches the release tag.
The session-list / spawn-panel / settings / terminal / token-statusbar
frontends were reorganized to share layout primitives with the new mobile
UI without regressing the desktop Hub.
Fixed
Hotfix → develop merges no longer leave the develop-side version constant
stale (develop-version-stale-v0.3.4).
Cursor Agent no longer drops chunks of larger inputs that contain a Ctrl+U
(cursor-agent-ctrl-u-chunk-input-drop).
Grok history viewer no longer renders blank rows caused by leftover SGR
state (grok-history-viewer-sgr-blank), and the Grok build display label
no longer breaks alignment (grok-build-display-label).
Grok responses and opencode pickers are no longer eaten by the cursor-hide
filter (grok-response-discarded-by-cursor-hide-filter, opencode-picker-discarded-by-cursor-hide-filter).
The orchestration conductor's initial prompt is now submitted with an
Enter (orchestration-conductor-initial-prompt-not-submitted), and
codex child sessions spawn reliably again
(orchestration-codex-child-spawn-failures).
Mobile drawer no longer shows a transparent background layer or lingers on
PC-width viewports (mobile-drawer-bg-layer-transparent, mobile-drawer-residue-on-pc-width). The floating hamburger, header height,
and tab bar dead space were also fixed
(mobile-header-band-floating-hamburger, mobile-header-height-reduction, mobile-header-tab-bar-dead-space).
Empty input bar no longer renders a stale placeholder height
(input-bar-empty-placeholder-height), and clicks in the empty wrap area
no longer lose focus (input-wrap-empty-area-focus).
The Hub marker filter no longer swallows CUP positioning, so layouts
driven by cursor positioning stay intact
(hub-marker-filter-strips-cup-positioning).
Batch approval Q-tabs no longer overflow the action bar
(batch-approval-tabs-overflow), and marker blocks no longer collapse
onto a single line (marker-block-line-collapse).
The spawn cwd chip no longer collides with a full-path prefix
(spawn-cwd-chip-fullpath-prefix-collision).
Approval popups no longer leak across sessions
(approval-popup-cross-session-leak).
Local-LLM routing fixes for Qwen via LM Studio / Ollama
(local-llm-qwen-lmstudio-ollama-unusable).
WebGL terminal renderer works again (vendored xterm.js generation mismatch).
The vendored xterm-addon-webgl.min.js had been updated to 0.19.0 (the
xterm.js 6.0.0 generation, which requires the mainDocument API of the
terminal core), while xterm.min.js and the fit / unicode11 / web-links
addons were still the older 5.x-generation files — only the license ledger
and the About dialog had been bumped to 6.0.0. Every loadAddon call then
threw Cannot read properties of undefined (reading 'createElement') inside
the addon, so the UI silently fell back to the DOM renderer on each session
switch, re-introducing the fullwidth-glyph / selection-highlight drift the
WebGL renderer exists to fix. The vendored core (xterm.min.js, xterm.min.css) and the three addons are now the actual 6.0.0-generation
artifacts, matching the ledger.
Orchestration fallback ID no longer collides across Hub restarts. When a
conductor started a child via spawn-child without going through /api/orchestration/create, the orchestration ID was s<parentSessionID>
(e.g. s3). After a Hub restart the session number was reassigned from #1,
so the same conductor session ID could reuse the previous run's ~/.many-ai-cli/orchestration/s<N>/board.md (header/purpose stayed from the
old run) and its child-<sessionID>.md history. The fallback is now s<parentSessionID>-<UnixNano>, which is unique per Hub start. Existing s<N>/ folders are harmless leftovers and can be moved aside or deleted
manually.
No more scroll residue when switching between terminals.attachTerminal
used to append the terminal DOM node first and then flush the buffered
chunks that had accumulated while the tab was hidden, which made the target
tab briefly show the pre-switch viewport and then scroll down through the
buffered output. flushPending now takes an onDrained callback, and attachTerminal flushes first — appending the container, releasing hidden
WebGL renderers, scrolling to the bottom, and fitting the terminal only
after the buffered chunks are fully written.