All notable changes to iosm-cli will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Cross-terminal keybinding fallbacks — added
Alt+...fallback bindings for frequently unreliable terminal control combinations (expandTools,toggleThinking, model cycling, model selector). - Keybindings parser compatibility layer —
keybindings.jsonnow accepts both preferredaction -> key(s)and legacykey -> actionformats, with action aliases (nextModel,previousModel,openModelSelector, etc.). - Keybinding normalization — loader now normalizes common key spelling/casing variants (
Control+, spacing, case differences) for consistent runtime matching.
- Platform-aware suspend defaults —
suspendhotkey is now disabled by default on Windows and remains enabled on Unix (Ctrl+Z+Alt+Z). - Hotkeys command output —
/hotkeysnow shows reverse model-cycle shortcut and renders active configured key for image paste instead of hardcoded value. - Keyboard documentation alignment — interactive/configuration/getting-started docs now document real keybinding format and cross-platform fallback shortcuts.
- Suspend runtime resilience — unsupported suspend environments now safely restore TUI state and show a warning instead of leaving UI in a broken state.
- User keybinding migration regressions — legacy keybinding files from older docs/examples now resolve to expected actions instead of silently failing.
- Per-turn specialist system overlay — runtime-selected specialist instructions are now injected as an additive system layer for the active root run, including protocol auto-repair retries.
- Routing provenance metadata — orchestration/task assignment records now persist selected specialist (
agent) and routing source for traceable worker labeling. - Model-semantic specialist router hooks — SDK/task pipeline now exposes semantic specialist routing callback support with richer candidate hints (
name/description/profile/instructions).
- Runtime specialist routing strategy — removed embedding dependency from the interactive runtime path; routing now uses model-semantic selection with deterministic heuristic fallback and strict time/confidence budgets.
fullprofile delegation policy — rootfullprofile prompt now explicitly prefers specialist delegation viatask(agent=NAME)for actionable domain work and avoidstask()for non-actionable chat/capability queries.- Task tool guidance quality —
taskschema/tool descriptions now prioritizeagent=routing, include expanded built-in specialist catalog, and clarify profile semantics. - Orchestration panel UX — header now renders elapsed
TIMEstopwatch instead of ETA; worker rows includeagent@profileand routing source label; emptyQUEUED/COMPLETED/FAILEDsections are omitted.
- Dynamic instruction application reliability — specialist instructions no longer rely on fragile custom-message layering; they now apply deterministically for the whole run and do not leak into subsequent turns.
- Retry-path context loss — protocol auto-repair retries now preserve runtime specialist instruction context.
- Small-talk misrouting regressions — short conversational turns are guarded from accidental specialist auto-selection.
- Orchestration completion flow — completed orchestration panel now archives cleanly before continuing root-agent response rendering.
- Runtime specialist instruction overlay —
fullroot session can now inject a selected custom/core agent instruction block at runtime (runtime_agent_context) so the same root conversation dynamically applies task-specific specialist guidance. - Assistant/runtime specialist labeling — interactive UI now renders specialist identity on assistant/tool frames when runtime specialist context is active (instead of always showing only the default root label).
- Expanded core specialist catalog — added/extended practical specialist agents for workflow optimization, tooling evaluation, readiness validation, data engineering, brand consistency, and result analytics.
- Root-agent specialist routing behavior — runtime specialist selection now prefers semantic routing using agent descriptions/instructions (embedding-backed when available) with deterministic fallback behavior.
- Orchestration worker visibility — orchestration progress now surfaces explicit worker identity with
agent@profileformatting where a specialized agent is chosen. - Task-agent auto-routing plumbing — task tool routing interfaces now carry richer agent hint metadata (name/description/instructions/profile) for higher-quality specialist selection.
- Runtime overlay activation gaps — specialist overlay path now covers non-imperative task requests more reliably instead of requiring narrow action-keyword patterns.
- UI consistency for specialist context — runtime specialist metadata is now consistently queued/consumed with display alias handling, preventing mismatched labels during turn rendering.
- Telegram live trace UX — running status card now presents richer execution telemetry (assistant/tool lifecycle events) in a compact streaming trace section instead of request→wait→final-only visibility.
- Streaming trace duplicate lines — assistant streaming trace now uses prefix-based upsert semantics, so the live card keeps one current
assistant streamingline instead of appending duplicates on every update. - Trace payload matching internals — added dedicated trace payload extract/find helpers to update existing trace rows deterministically in both visible and full-history trace buffers.
- Telegram completion contract hardening — bridge runtime prompt now explicitly requires a short final textual summary for each completed turn (prevents tool-only finishes in normal flow).
Task completed with no assistant text outputfallback quality — replaced generic empty-output message with contextual fallback summary including tool activity, elapsed time, and recovery hint for concise no-tool recap.- Turn-level telemetry for empty-output diagnosis — Telegram bridge now tracks per-turn tool call count and unique tool names and logs them when assistant final text is empty.
- Assistant text capture resilience — bridge now also captures text from
message_updateevents as an additional fallback path beforeagent_end.
- Telegram runtime guidance injection — bridge now appends runtime execution guidance to child RPC system prompt to reduce unstable command patterns during remote execution (focused outputs, bounded scans, script-file fallback for complex shell flows).
- Windows shell adaptation robustness — PowerShell-adapted commands now execute via
-EncodedCommand, avoiding fragile quote/escape transport through bash wrappers. - Windows adapter false-positive routing — commands like
ls C:\projectsare no longer incorrectly forced intocmd.exejust because they include a Windows path argument. - Telegram long-message delivery stability — rich/fallback message sending now chunks long output payloads to stay within Telegram safe limits and reduce delivery failures.
- Telegram bridge module split — extracted dedicated Telegram runtime modules:
telegram-apiclient with serialized outbound requests and retry controlsprompt-queuewith fair round-robin draining across chatspolling-statestore for persisted long-polling offsets
- Configurable Telegram retry policy — introduced
telegram.retrysettings block with API retry/backoff, polling backoff, and status-edit network retry controls
- Bridge retry/backoff wiring — Telegram bridge now reads retry/backoff parameters from settings instead of hardcoded values for:
- API request retries
- polling-loop transient failure backoff
- status edit network retry delay
- Configuration docs — extended Telegram configuration examples and generated settings documentation with new retry policy fields
- Added dedicated test suites for:
- Telegram API retry and outbound serialization behavior
- prompt queue fairness
- polling offset persistence
- Expanded
settings-managertelegram settings tests to cover retry normalization and safe bounds
- Telegram polling trace mode — added verbose polling/update tracing for diagnostics via
telegram.debug.pollingTrace=trueandIOSM_TELEGRAM_POLLING_TRACE=1
- Telegram live status update cadence — raised default status edit throttle to
3000ms, applied runtime bounds1000..10000ms, and removed implicit animation-time override to reduce API pressure
- Stale callback query handling —
answerCallbackQuerynow safely ignores expired callback IDs (query is too old/ invalid query) instead of surfacing noisy polling failures - Polling network backoff — transient
fetch failedand related network errors now use exponential backoff (2sto30s) in long polling loop - Status edit resilience on network loss — transient status edit network failures now schedule coalesced retries instead of immediate repeated edits
- Telegram API transport diagnostics — fetch-level Telegram API failures now include method context (
Telegram API <method> request failed) for faster root-cause analysis
- Telegram API 429 resilience — added automatic
retry after Nbackoff/retry handling for all Telegram API operations (includingsendMessage,editMessageText,sendDocument, and control actions) - Telegram status message recovery — when live status edit target becomes invalid (
MESSAGE_ID_INVALID, deleted or non-editable message), bridge now recreates status message and continues updates on a freshmessage_id - Bridge runtime stability under delivery failures — wrapped RPC event callbacks and final output delivery with fail-safe guards to prevent bridge process crashes from transient Telegram delivery errors
- Windows shell command compatibility — added runtime auto-adaptation for Windows command syntax, routing cmd-style commands (
%VAR%,dir,C:\...) tocmd.exeand PowerShell-style commands ($env:...,Get-*) topowershell.exe - Telegram bridge command execution on Windows — fixed failures when users sent native Windows shell commands through Telegram-driven runs while IOSM executed under bash
- Execution path consistency — applied shell adaptation uniformly across foreground bash execution, bash tool execution, and detached background processes
- Added regression suite for Windows command adaptation and explicit-shell passthrough behavior
- META orchestration default fan-out — actionable META prompts without explicit
agents=Nnow require at least two top-leveltaskcalls, preventing silent single-thread execution for orchestration-first requests - Locale-agnostic META fallback — replaced language-specific complexity keyword detection with runtime orchestration compliance signals (
required task calls, nested delegation status) for stable behavior across languages - MCP/external tool output rendering — unknown external tools now use generic fallback rendering instead of empty tool boxes, restoring visible arguments/results in interactive UI
- Updated META prompt fallback tests to cover actionable vs question-like prompts
- Added regression test for unknown external tool result rendering in
ToolExecutionComponent
- Playbook filename canonicalization —
/initandiosm initnow normalize lowercase variants (agents.md,iosm.md) to canonicalAGENTS.mdandIOSM.md - Cross-platform case handling — implemented robust case-only rename flow (with temporary hop) to reliably normalize filenames on case-insensitive filesystems
- Profile context continuity —
IOSM.mdcontext is now kept loaded in the resource layer to avoid context loss after runtime profile switching
- Standard init path resolution — standard
/initnow resolves and writes through canonical playbook path before reading/updating repository guidance - IOSM guide writers — IOSM/AGENTS guide writers now enforce canonical path selection prior to write operations
- Added regression tests for lowercase-to-canonical playbook rename behavior in:
- iosm guide writer flow
- iosm init flow
- interactive standard
/initflow
- Updated resource-loader profile test expectations for runtime profile switching behavior
- Profile-aware
/initflow —/initnow follows active profile semantics:full/plan/metaupdatesAGENTS.md;iosminitializes and synchronizes bothAGENTS.mdandIOSM.md - AGENTS managed sync block for IOSM — introduced deterministic managed section in
AGENTS.mdduring IOSM init, preserving user-authored content outside the managed block
- IOSM init file sync contract —
iosm initnow performs guaranteed create/update for bothAGENTS.mdandIOSM.mdto avoid missing physical playbook files - Interactive init control flow — added dedicated standard-init session tracking with explicit “already running” guard and interrupt-safe cancellation path
- CLI init status output —
iosm initnow reports per-file state forAGENTS.mdandIOSM.md(created/updated/skipped/unchanged)
- Updated README release marker and highlights to
0.3.1 - Updated
docs/getting-started.mdanddocs/interactive-mode.mdto document profile-scoped/initbehavior
- Expanded coverage for IOSM/AGENTS guide writers and profile-aware
/initbehavior in interactive and init test suites
- Unified framed message windows — introduced consistent full-contour windows (
╭╮│╰╯) with labels and padding for interactive conversation output - Input area redesign — replaced the plain editor strip with a framed, mode-aware input box that reflects active mode (
input,command,bash) - Reasoning preview stream UX — added collapsed reasoning summary with live spinner animation during assistant streaming
- Compact footer setting — added configurable compact footer mode in settings and interactive selector
- Assistant response branding — assistant window label now renders as
IOSM Agent - Tool execution visuals — migrated tool call/result rendering from filled background blocks to green-framed windows with consistent spacing
- Orchestration panel visuals — migrated orchestration status panel to orange-framed
IOSM Orchestrationwindow and aligned inner section header colors - Message surface consistency — removed legacy filled-background user/orchestration/tool blocks in favor of border-first presentation
- Updated README release marker and release highlights to
0.3.0
- Added and expanded coverage for framed message/input rendering, assistant label updates, tool window framing, and orchestration panel presentation
- Startup crash after npm install — fixed packaging regression where
dist/core/settings.schema.jsonwas not included in published artifacts, causingENOENTon startup in some global installers (including Volta) - Settings schema load resilience — added safe fallback validator path when settings schema file is missing or unreadable, so runtime no longer hard-crashes at import time
- Policy Engine v2 — added TOML-backed layered policy resolver with deterministic precedence and legacy compatibility bridge for existing permission rules
- ACP mode — added
--mode acpadapter over RPC/event bus with capability negotiation and compatibility degradation handling - Tooling expansion — added built-in
apply_patch,tool_search, andtool_suggesttools - Unified execution runtime — added PTY-capable unified execution support for interactive command sessions (
exec+ stdin streaming workflow) - Session resume indexing — added indexed session lookup to avoid full filesystem scans on large session sets
- Schema-driven settings docs pipeline — added generated configuration docs and CI validation scripts for settings/schema drift detection
- Permission flow — unified permission evaluation across interactive and RPC runtimes through policy-backed evaluator
- Permission UX — added turn-scoped and session-scoped approval behavior to reduce repeated prompts in ask mode while preserving safety controls
- MCP governance — enforced source trust checks and logged per-tool policy decision traces for MCP tool calls
- Task UI in interactive mode — task-state operations now render as structured checklists (
done / in progress / pending) instead of raw JSON argument dumps - Package/tool security baseline — install/update/extensions/tool-manager paths now use trust-ledger and source security checks (host allowlist, fingerprint/integrity, consent gates)
- Linux sandbox execution — added explicit opt-in sandbox path using
bwrapwith hard failure when required runtime is unavailable - Command rollback safety — integrated filesystem checkpoint snapshot/restore with deterministic rollback ordering in command dispatch flow
- Updated README release marker and release highlights for
0.2.16 - Added docs navigation entries for ACP mapping and generated configuration reference
- Refreshed configuration documentation from schema generation pipeline
- Expanded coverage for policy engine behavior, ACP mode, apply_patch grammar/runtime, tool_search/tool_suggest flow, session index resume path, and unified execution runtime
- Revalidated interactive task-plan/task-checklist rendering and orchestration-related interactive regressions
- Telegram stop/resume contour — when bridge is stopped, Hub now switches to a dedicated stop-state action set (
Start,Refresh,Help) instead of showing full active-run controls - Telegram quick keyboard state — reply keyboard now also switches to stop-state layout (
Hub,Start,Help) and restores full actions after resume - Telegram Hub navigation after restart —
/startnow posts a fresh Hub card at the bottom of chat for immediate visibility
- Telegram quick-action reliability — removed over-aggressive quick-action debounce that could drop first button press and make actions appear to require a second tap
- Slash command parsing in Telegram —
/start@botnameand similar bot-suffixed slash commands now route correctly - Stopped-bridge menu routing — command/model callbacks in stopped mode now return cleanly to Hub instead of leaving stale menu state
- Revalidated telegram-related runtime changes with TypeScript check and interactive/command regression suites
- Telegram bridge mode — added mobile remote-control runtime (
iosm telegram/--mode telegram) with long-polling transport, single-operator allowlist guard, Control Hub navigation, live status updates, quick-action keyboard, model picker, and confirmation flow for dangerous tool calls - Headless built-in command dispatcher — extracted built-in slash command execution into a shared dispatcher for non-TUI runtimes
- RPC built-in command contract — added
get_builtin_commandsandrun_builtin_commandRPC commands so external clients can invoke core slash commands without TUI routing - RPC permission events — added
requires_confirmationevent andconfirm_permissionextension UI request contract for ask-mode tool confirmations in external clients - Subagent background run registry — added persistent metadata/log tracking for background subagent execution with stop/stop-all/prune helpers and interactive command surface
- CLI mode surface — expanded
--modeto includetelegramand added top-leveliosm telegramalias command - RPC startup behavior — RPC mode now starts without a preselected model so remote clients can choose model later (for example via Telegram
/model) - Interactive subagent commands — extended
/subagent-runswithbgmanagement commands (list/running/queued/done/error/cancelled/status/logs/stop/stop-all/prune) - Provider policy filtering — disabled
google-antigravityprovider from auth/model/login catalogs and default model resolution in this build - Example set refresh — removed deprecated
examples/extensions/antigravity-image-gen.tsand updated extension example count
- Updated README integration/mode coverage with Telegram bridge examples and profile-based launch commands
- Updated
docs/cli-reference.mdwith--mode telegramandiosm telegram --profile ...usage - Updated
docs/configuration.mdwithtelegramsettings schema (enabled,botToken,allowedUserIds,transport,chatDefaults) - Updated
docs/rpc-json-sdk.mdwith built-in command RPC calls and confirmation event/response protocol
- Added command dispatcher coverage in
test/command-dispatcher.test.ts - Added subagent background run storage/control coverage in
test/subagent-background-runs.test.ts - Expanded RPC/interactive/settings/model/auth regressions for telegram mode wiring, built-in command dispatch, permission-mode/state handling, and provider policy filtering
- Interactive extension lifecycle commands — added
/extensionswith/extalias forlist,install,update,remove,enable,disable, andhelpflows in interactive mode - Background prune command — added safe cleanup support for old completed background process records via
/bg prune [hours] - Git snapshot runtime context capture — added bounded git snapshot composition (
status,diff --stat,diff --cached --stat) wired into prompt context when enabled - Prompt-context setting for git snapshot size — added
promptContext.gitSnapshotMaxChars(default2000)
- Prompt context telemetry —
system_prompt_context_composetrace events now include git snapshot diagnostics (git_snapshot_chars_before,git_snapshot_chars_after,git_snapshot_truncated,git_snapshot_max_chars) - Background command UX —
/bgusage/help/menu now includes prune flow and clearer cleanup guidance - System prompt guidance — root-agent guidance now includes explicit
/extensionslifecycle routing for extension management requests
- Updated README version marker to
0.2.13 - Updated
docs/interactive-mode.mdanddocs/cli-reference.mdwith/extensions(/ext) and/bg prunecommand coverage - Updated
docs/configuration.mdforpromptContext.gitSnapshotMaxCharsand bounded git snapshot behavior - Updated
docs/sessions-traces-export.mdwith expanded prompt-context trace event fields - Refreshed
task.mdandimprovement-checklist.mdwith v2 execution status and risky-feature rollout policy
- Added git snapshot context tests in
test/system-prompt.test.ts - Added background prune coverage in
test/background-processes.test.ts - Added interactive command coverage for
/bg pruneand/extensionslifecycle paths intest/interactive-mode-status.test.ts
- Startup command execution policy — system prompt guidance now explicitly routes "start/run project", dev-server, and watcher requests to detached
bashexecution (run_in_background=true) by default, with foreground mode reserved for immediate-output needs - Subagent runtime capability hint — delegated task prompts now include the same detached-startup guidance so child agents avoid blocking turns when launching persistent processes
- Updated README usage guidance to document default detached handling for project/server startup requests
- Updated
docs/cli-reference.mdanddocs/interactive-mode.mdwith explicit startup-to-background behavior and/bgfollow-up flow
- Added system-prompt regression asserting explicit startup background guidance (
run_in_background=true,/bg status|logs|stop) - Expanded subagent orchestration tests to assert delegated runtime hints include startup/background routing rules
- Prompt context preprocessing controls — added deterministic
promptContextpipeline (normalize -> dedupe -> per-file cap -> total cap) with optional git snapshot plumbing and context preprocessing trace metrics - Background shell process runtime — added persistent detached process manager with metadata/log tracking under
.iosm/background/processes - Interactive background command surface — added
/bgcommand family (list,status,logs,stop) and detached shell submission syntax via! <command> & - Bash detached execution parameter — added
run_in_backgroundsupport in built-inbashtool and session-level bash execution path with returnedbackgroundTaskId/status/log metadata - Extension tool permission tiers — added optional
requiredPermissionmetadata (read-only,workspace-write,danger-full-access) for extension tools and runtime propagation through permission flow - Subagent tool-name normalization — added normalization/filtering for custom agent
toolsanddisallowed_tools(lowercase,-->_, unknown removal with diagnostics)
- Permission flow unification — consolidated tool permission evaluation for built-ins and extensions with tier/source-aware request metadata and stricter extension enforcement branch behind
permissions.extensionToolEnforcement(default off) - Compaction continuation framing — compaction summary prefix now explicitly instructs continuation from current state without full recap unless user asks
- System prompt guidance updates — bash guidance now includes detached execution usage (
run_in_background) for long-running non-blocking commands
- Updated README header/version marker to
0.2.11 - Updated interactive/CLI/configuration/session-trace/orchestration docs with:
- background process workflow (
! ... &,/bg) promptContextsettings and defaults- extension permission tier semantics and
permissions.extensionToolEnforcement - subagent frontmatter tool normalization behavior
- background process workflow (
- Updated extension authoring docs with
requiredPermissionexamples forregisterTool
- Added
test/background-processes.test.tscoverage for start/list/log-tail/stop lifecycle - Added interactive
/bgcoverage intest/interactive-mode-status.test.ts - Added
run_in_backgroundcoverage forbashintest/tools.test.ts - Expanded regressions for context preprocessing, extension permission-tier behavior, compaction continuation framing, and subagent tool normalization
/ultrathinkbuilt-in command — added deep multi-iteration analysis mode with robust slash parsing (-q/--iterations,--separator), context-aware no-query fallback, and shared behavior throughAgentSession.promptacross interactive/print/json/rpc flows- Ultrathink checkpoint engine — added structured checkpoint state (
Goal,Verified Facts,Rejected Hypotheses,Open Questions,Next Checks) with carry-forward summaries and checkpoint compression support for long runs - Ultrathink read-only execution policy — added strict temporary read-only tool filtering during ultrathink runs with guaranteed restoration of the original active tool set
- Ultrathink evidence/runtime tests — added dedicated parser and session-flow test suites covering iteration loops, no-query objective resolution, streaming guards, budget/stagnation paths, evidence-policy fallback, and tool-set restoration
- Ultrathink runtime hardening — added budget guardrails (per-iteration input, run input/total tokens, run cost), stagnation early-stop behavior, and evidence-catalog carry-forward between passes
- Ultrathink anti-hallucination policy — added quantitative-claim evidence tagging rules, verify/synthesis no-new-evidence marker handling, and compliance-repair pass support
- Ultrathink grounding behavior — when early passes produce no tool evidence, runtime now injects an internal grounding retry that explicitly forces live read-only workspace probes before continuing
- Interactive slash UX — added
/ultrathinkto built-in slash registry and interactive autocomplete argument hints (-q,--iterations, common iteration counts)
- Ultrathink hard-stop on evidence mismatch — repeated evidence-policy mismatch no longer aborts the entire command; runtime now degrades gracefully and returns a best-effort final response instead of throwing
- Internal prompt visibility leakage — ultrathink internal retries (iteration/grounding/policy-repair prompts) are now consistently routed through hidden orchestration aliases, so users see clean progress text instead of raw directives
- Budget accounting with internal retries — per-iteration budget checks now account for cumulative input tokens across the main pass plus internal retry prompts
- Updated README header/version marker to
0.2.10 - Added
/ultrathinkcommand coverage to interactive and CLI references, including read-only behavior, context fallback, and grounding-retry semantics
- Added
test/ultrathink.test.tsparser/validation coverage for/ultrathink - Added
test/agent-session-ultrathink.test.tsruntime coverage for q-iteration flow, early-stop, budget-cutoff, no-query fallback, evidence-policy graceful fallback, and restoration guarantees - Expanded semantic regressions to assert
/ultrathinkbuilt-in slash discoverability
- Structured verification/data tools — added built-in
test_run,lint_run,typecheck_run, anddb_runwith runner/adapter auto-detection, normalized statuses, bounded output capture, and tool-registry/SDK exports - DB runtime settings layer — added
dbToolssettings (defaultConnection, namedconnections, adapter-specific fields, migrate script options) wired into session/runtime resolution fordb_run - Universal terminal theme — added built-in
universaltheme and made it the default/fallback theme for interactive mode - Protocol and stall auto-repair flow — added bounded automatic recovery for raw pseudo tool markup and silent stop responses, including interactive recovery actions (retry, repeat prompt, switch model + retry, keep session)
- Profile tool policy expansion — enabled
test_run,lint_run,typecheck_run, anddb_runacross write-capable engineering profiles (full,meta,iosm); enabledtypecheck_runforiosm_verifier - Interactive UX readability pass — updated dark/light palettes, introduced universal box colors, and normalized box paddings/section spacing for user/custom/tool/plan/subagent/summary messages
- System prompt hardening — added explicit guidance for structured verification/data tools, instruction-priority handling, untrusted tool-output/web-content handling, completion checks before final success claims, and stricter pseudo-markup prohibition
- Doctor diagnostics coverage — expanded interactive
/doctorCLI-toolchain checks to include verification and DB client commands used by new structured tools
- Abort continuation wording — when user interrupts execution, recovery selector now shows a user-action title (
You stopped the current run) instead of model-failure wording - Protocol false positives — inline explanatory mentions like
raw <tool_call>/<function=...> markupno longer trigger protocol auto-repair; only executable-looking pseudo-blocks are repaired - Dark theme contrast in boxes — fixed low-contrast text-on-dark-box cases for user/custom/tool blocks
- Updated README header/version marker to
0.2.9 - Updated CLI/config/interactive/development docs with
test_run/lint_run/typecheck_run/db_run, profile policy updates,dbToolsconfiguration, and/doctortoolchain scope
- Added dedicated tool coverage for
test_run,lint_run,typecheck_run, anddb_run - Added protocol auto-repair and recovery-selector coverage in interactive/session tests (raw markup, silent stop, false-positive guard, model-switch recovery)
- Expanded regressions for profiles, SDK exports, settings manager, shadow guard, system prompt guidance, and theme defaults/colors
web_searchbuilt-in tool — added structured web discovery with provider chaining (Tavily -> SearXNG -> DuckDuckGo), include/exclude domain filters, recency/topic/depth hints, runtime configuration hooks, and permission-guard integrationgit_writebuilt-in tool — added structured git mutation actions (add,restore,reset_index,commit,switch,branch_create,fetch,pull,push,stash_push,stash_pop,stash_apply,stash_drop,stash_list) with action-specific validation, permission-guard integration, and safe argv execution (no raw shell passthrough)- GitHub tools settings — added persistent
githubToolssettings block (networkEnabled,token) and interactive settings submenu for enabling git network actions and managing GitHub token - Expanded
git_readactions — added read-only actionsshow,branch_list,remote_list, andrev_parsewhile preserving backwards compatibility for existingstatus,diff,log, andblamecontracts
- Shared git tool runtime — consolidated git process execution/capture/truncation/error handling into a common internal helper used by
git_readandgit_write - Profile and mutation policy updates — enabled
git_writeby default in write-capable profiles (full,meta,iosm), includedweb_searchin read-oriented profiles, and updated mutation classification in task/shadow-guard checks - System prompt and tool-routing guidance — added explicit guidance to prefer
git_writeover ad-hoc git bash mutations and to useweb_searchfor discovery plusfetchfor source validation - CLI/SDK tool surface expansion — updated tool registry, factories, and exports to include
web_searchandgit_writein all relevant creation paths and public SDK/index entrypoints - Settings/runtime wiring — threaded web search runtime config (provider/fallback/safe-search/max-results/timeout/credentials) and GitHub network/token policy from settings into tool execution
- Interactive menu hint UX polish — normalized selector/menu control hints across settings, model/oauth/MCP selectors, tree/session views, and config/model-scoping panels for consistent navigation/action/search/exit guidance
- Updated README header/version marker to
0.2.8 - Updated CLI/config/interactive/development/RPC docs for
web_searchbehavior,git_writenetwork actions, GitHub tools settings (networkEnabled,token), and expandedgit_readaction coverage - Updated help text and tool listings to reflect the new structured git/web workflow (
web_search+fetch,git_read+git_write)
- Added dedicated
web_searchandgit_writetool coverage, plus expandedgit_readtests for new actions (show,branch_list,remote_list,rev_parse) - Added/updated regression checks for profile tool membership, SDK defaults, settings manager behavior, system prompt guidance, shadow-guard/task classification, and settings/menu hint behavior
fetchbuilt-in tool — added structured HTTP tool with fieldsurl,method,headers,body,timeout,max_bytes,response_format,max_redirects; includes manual redirect loop control, bounded body capture, andautoJSON/text formatting bycontent-typegit_readbuilt-in tool — added read-only structured git introspection actions (status,diff,log,blame) with action-specific validation and safe argv execution (no raw shell passthrough)fs_opsbuilt-in tool — added structured filesystem mutation tool (mkdir,move,copy,delete) with explicitrecursive/forcesafety gates andEXDEVmove fallback (copy + delete)- SDK/public exports for new tools — exported factories, tool singletons, and typed input/options/details surfaces for
fetch,git_read, andfs_ops
- Profile tool policy expansion —
fetchandgit_readare now included in read-only exploration profiles;fs_opsis included in write-capable engineering profiles (full,meta,iosm) - Dynamic
fetchmethod policy by active profile — read-only profiles (explore,plan,iosm_analyst) allow onlyGET|HEAD|OPTIONS; write-capable profiles allow full method set (GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS) - Unified tool permission/pre-hook integration —
fetchandfs_opsnow pass through the same session permission and pre-tool hook pipeline used by write-capable built-ins - Mutation classification updates —
fs_opsis now classified as mutating in shadow guard and task write-capable tool checks
- Updated CLI help, system prompt tool guidance, and docs pages to include
fetch,git_read, andfs_opswith usage/policy notes - Updated profile/tool tables and architecture snippets to reflect the expanded built-in tool layer
- Added dedicated coverage for
fetch,git_read, andfs_ops - Added regression assertions for profile membership, read-only/write-capable classification, shadow guard behavior, and CLI help/tool listings
- Shared memory scope policy — new
IOSM_SHARED_MEMORY_SCOPE_POLICYenvironment variable (legacy/warn/enforce) controls how missing scope arguments are handled inshared_memory_read/shared_memory_write;metaprofile automatically activateswarnmode so omitted scopes surface a warning in tool output and details - Shared memory usage analytics — new
summarizeSharedMemoryUsage()API aggregates write counts by scope, unique writers, unique keys, and per-task/delegate breakdown for observability in orchestrated runs - Nested delegation detection —
promptMetaWithParallelismGuardnow tracksnestedDelegationMissing: when top-level fan-out is satisfied but no nested delegates were observed for multi-stream tasks, the parallelism correction prompt and TUI warning fire explicitly - Workstream semantic deduplication —
semanticallyDeduplicateWorkstreamTitles()uses Jaccard token similarity (threshold 0.82) to eliminate near-duplicate delegate workstream titles before dispatch - Duplicate delegated section detection —
detectDuplicateDelegatedSections()compares normalized section bodies to catch copy-pasted or near-identical delegate blocks with ≥92% coverage overlap - Workstream title uniquification —
uniquifyWorkstreamTitles()appends ordinal suffixes to disambiguate repeated titles in fan-out plans - Coordination details in task tool output —
TaskToolDetailsnow surfaces acoordinationobject withsharedMemoryWrites,currentTaskWrites,currentTaskDelegateWrites,runScopeWrites,taskScopeWrites,duplicatesDetected,claimKeysMatched, andclaimCollisionsfields for post-run auditing - Swarm progress shared memory integration — TUI swarm progress reporter now reads
results/prefix keys from shared memory to enrich per-task summary display with delegated totals
- META profile evidence policy —
metaprofile system prompt and subagent task prompt now require that metrics (speedup, compliance scores, conflict counts) are backed only by observed runtime evidence; unknown values must be marked asunknownrather than inferred - META profile artifact claims —
metaand meta-subagent prompts now prohibit claiming report files or artifacts exist unless they were produced in the current run or verified on disk resolveScopereplacesnormalizeScope— shared memory tool's scope defaulting logic refactored intoresolveScope()with policy-aware warning output andenforcemode that throws on missing explicit scopecompletedTaskToolCallstracking — parallelism guard now separately tracks completed (resolved) task calls so nested delegation assessment waits for actual task completion rather than firing prematurely on partial state
- False nested-delegation compliance — guard no longer silently passes when top-level fan-out count is met but zero nested delegates exist inside multi-stream tasks; correction prompt now fires
- Scope warning surface —
shared_memory_writeandshared_memory_readtool results now includescopePolicyandscopeWarningin theirdetailspayload for agent-side introspection
- README redesign — complete rewrite with professional positioning, IOSM methodology section with 4-phase table and 6 metrics, architecture ASCII diagram, profile split into primary/specialist, integration modes with CI row, extensibility as runtime platform, accurate install/extension syntax from docs
- Orchestrate parallel fan-out defaults —
/orchestrate --parallelnow auto-sets--max-parallelto the selected agent count when omitted, reducing accidental single-lane execution - Parallel worker profile auto-selection — when no worker profile is provided in parallel orchestration, assignments default to
metain write-capable host contexts for stronger orchestration behavior - Delegate hint propagation for orchestrate assignments — assignment generation now injects
delegate_parallel_hintguidance to drive nested delegate fan-out inside child tasks - Swarm dispatch timeout controls — scheduler now supports bounded dispatch timeouts (including
IOSM_SWARM_DISPATCH_TIMEOUT_MS) to avoid silent long stalls - Interactive swarm progress surfaces — improved live subagent task/delegate progress rendering and swarm-aware footer busy state in TUI
- Task profile defaulting — task tool now defaults missing
profileto current host profile (fallbackfull) instead of always forcingfull - Delegation depth baseline — max delegation depth default increased to
2for better nested decomposition capacity - Shared memory read behavior —
shared_memory_readnow returns metadata-only by default (include_values=false) with safe value preview details when requested - Swarm planning fan-out quality — planner now prioritizes code-relevant touches and partitions work into multiple workstreams more aggressively for parallel execution
- Singular run id generation —
/singularrun ids now include milliseconds and random suffix for collision-resistant rapid runs
- Dependent-task dead-end behavior — scheduler now marks downstream tasks as blocked when dependencies fail, preventing ambiguous pending states
- Status update loss under file lock contention — team task status writes now queue and retry asynchronously instead of being dropped during temporary lock conflicts
- Steering skip false errors — parallel task agent no longer marks steering-driven tool skips as execution errors
- Swarm-from-singular startup guard — execution now fails fast with a clear warning if no active model is configured
- Strict delegation in orchestrated contexts — nested delegation contract now also applies in run/task orchestrated contexts when delegate hints indicate required fan-out
- Updated README to
v0.2.5and added a focused "What's New in v0.2.5" section - Expanded orchestration docs (
interactive-mode,cli-reference,orchestration-and-subagents) with/orchestrateparallel defaults and delegation guidance
- META profile onboarding UX — switching to
metanow shows an explicit runtime hint describing orchestration-first usage and when to switch back tofull - META interruption fallback hint — when a run ends without any assistant message in
meta, the UI now emits a recovery warning with concrete prompt guidance - Task host-profile runtime getter — task tool integration now supports dynamic host profile reads (
getHostProfileName) so orchestration pressure follows live profile changes during a session
- META directive policy (chat-safe classification) — meta orchestration directive now explicitly classifies non-repository prompts as direct chat responses and limits orchestration rules to actionable repository work
- META profile system prompt alignment — profile-level prompt now mirrors the chat-safe classification behavior to avoid conflicting orchestration instructions
- Internal orchestration metadata aliasing — hidden orchestration UI metadata now always persists display aliases (including streaming paths) for safer prompt display substitution
- Profile switch propagation into task orchestration — runtime profile changes now propagate through session config-change events and task-tool host-profile resolution
- Invisible assistant responses in meta chat prompts — assistant prose suppression no longer triggers for
META_ORCHESTRATION_DIRECTIVEmetadata (suppression remains for legacyORCHESTRATION_DIRECTIVEblocks only) - Meta interruption messaging consistency — differentiated interruption guidance now appears for both assistant-level abort/error and run-level early termination scenarios
- Updated README version markers and added a dedicated Modes At A Glance block
- Added explicit META model requirements guidance (modern models, large context windows, high output limits) in README, CLI reference, interactive mode docs, and configuration docs
- Startup model restore after restart —
createAgentSession()now hydrates missing saved provider/model definitions frommodels.devbefore resolving default model, so previously selected providers such as coding-plan providers are restored automatically on relaunch - Stale startup warning suppression — interactive startup no longer shows stale
No models available...warning when model restore succeeds during session initialization - Restart UX consistency — startup header and active session state now align with restored saved
provider/modelselection without requiring manual/modelre-selection
- Models.dev provider+model catalog runtime — added full catalog parsing (providers + models metadata) with timeout/fallback behavior for interactive auth/model flows
- Automatic provider model hydration after
/login— when a provider has credentials but no built-in model definitions,iosm-clinow registers models frommodels.devso/modelis immediately usable (including coding-plan providers such aszai-coding-plan) - Startup/on-demand auth model hydration —
/modelnow attempts to hydrate missing models for saved authenticated providers before rendering provider/model choices
- Provider/model visibility in status line — footer and model-switch status now display
provider/modelto make cross-provider switches explicit even when model IDs are identical - Auth UX feedback — login flow now reports a clear warning when credentials are stored but no models can be loaded yet
- API-key login crash — fixed unbound registry method usage that caused
TypeError: Cannot read properties of undefined (reading 'models')in interactive login flows - Empty model selector after provider login — fixed cases where
/modelstayed empty after successful API-key auth for providers not shipped in the built-in registry
- Updated README and docs (
getting-started,interactive-mode,configuration) to reflect full models.dev-backed provider/model availability via/loginand/model
- Run/task shared memory runtime — introduced
.iosm/subagents/shared-memory/*.jsonstate with versioned entries and history for cross-task coordination - Shared memory tools — added
shared_memory_writeandshared_memory_readtools for subagent orchestration (runandtaskscopes, CAS support, append/set modes) - Canonical
/swarmcommand surface — added dedicated runtime commands:/swarm run,/swarm from-singular,/swarm watch,/swarm retry,/swarm resume(with bounded parallelism and budget controls) - Swarm scheduler reliability modules — added dedicated scheduler/locks/gates/state-store/spawn/retry components for stable multi-task dispatch under contention
- Swarm lock + gate execution model — introduced hierarchical touch locks and contract-aware task/run gates for
Scopes -> Touches -> Locks -> Gates -> Done - Swarm runtime artifacts — added persisted run state in
.iosm/orchestrate/<run-id>/(run.json,dag.json,state.json,events.jsonl, checkpoints, reports) - Swarm watch telemetry — added runtime visibility for ready/running/blocked/done distribution, budget usage, lock snapshot, ETA/throughput, critical path, and theoretical speedup
- Swarm spawn policy controls — added high-risk spawn candidate classification with confirmation-gated fan-out behavior
- Project index subsystem — introduced repository indexing (
.iosm/project-index/index.json) for scale-aware planning and targeted file selection - Failure retrospective engine — added failure-cause classification and retry directive generation for smarter follow-up attempts
- Swarm-first orchestration flow —
/singularexecution handoff now supportsStart with Swarm (Recommended)and routes selected options to/swarm from-singular ... - Command separation —
/orchestrate --swarmremoved;/swarmis now the canonical gated runtime while/orchestrateremains manual legacy team splitting - Task orchestration contract —
tasktool/runtime now carries richer run/task metadata and improved scheduling context for delegated execution - Interactive swarm observability — expanded interactive mode status/watch output with deeper swarm runtime diagnostics and task progress details
- Swarm retry stability — improved retry bucket handling (
permission,dependency/import,test,timeout,unknown) to reduce noisy re-runs - Lock/contention handling — improved execution behavior for conflicting touches and blocked tasks in DAG scheduling scenarios
- Expanded README, CLI reference, interactive mode, and orchestration docs for swarm runtime semantics, shared-memory collaboration, and reliability controls
- Interactive engineering contract manager (
/contract) — field-by-field contract editing with immediate save-on-enter and automatic JSON generation for project scope - Layered contract model — explicit
project,session, andeffectivecontract layers with copy/delete flows and merged runtime enforcement - Singular feasibility mode (
/singular) — command-first feasibility analysis that combines repository baseline scan with a standard agent pass and returns exactly three implementation options - Option-driven execution handoff —
/singularnow produces concrete file targets, step plans, trade-offs, and decision guidance before implementation starts - Regression coverage for large paste UX — multiline unbracketed paste now covered by dedicated tests to ensure one submission flow and compact marker rendering
- Feasibility workflow naming —
/blastreplaced by/singularfor feature feasibility decisions - Profile cleanup —
/shadowworkflow removed to avoid duplication with plan-oriented analysis - Contract interaction model — removed extra save step in field editor; entering value immediately persists to selected scope
- TUI width safety — startup resources block now truncates long lines to terminal width, preventing render crashes on narrow terminals
- Paste queue behavior — large pasted multiline input is treated as a single paste event instead of fragmented queued submissions
- Expanded README with dedicated decision workflow section (
/contractvs/singular), command migration notes, and clearer contract layer distinctions - Extended interactive mode docs with explicit
effective/session/projectexplanations and migration guidance from removed commands - Updated CLI reference with interactive feasibility/contract command behavior and migration notes
- Semantic search runtime — Added built-in
semantic_searchtool (index,query,status,rebuild), interactive/semanticmanager, and top-leveliosm semanticcommand - Semantic setup UX upgrades — Added provider model discovery (OpenRouter/Ollama) and setup-flow guidance for optional fields
- Search/analysis toolchain expansion — Added separate built-in tools:
rg,fd,ast_grep,comby,jq,yq,semgrep,sed - Doctor CLI diagnostics for tools —
/doctornow reports external CLI toolchain availability (rg,fd,ast_grep,comby,jq,yq,semgrep,sed) in text and JSON output - CLI entry point — Standalone
iosmbinary with full argument parsing - Interactive mode — Multi-turn terminal agent with keyboard-driven controls
- Print mode — One-shot
iosm -pfor scripting and CI - JSON stream mode — Machine-readable
--mode jsonevent output - RPC mode — stdio JSON-RPC server for IDE integrations
- Built-in tools —
read,bash,edit,write,grep,find,ls,rg,fd,ast_grep,comby,jq,yq,semgrep,sed - Multi-provider support — Anthropic, OpenAI, Gemini, Groq, Cerebras, xAI, OpenRouter, Mistral, AWS Bedrock, Azure OpenAI, and more
- Model cycling —
--modelsflag andCtrl+Pfor model rotation - Thinking levels —
--thinking off|minimal|low|medium|high|xhigh - Agent profiles —
full,plan,iosm+ advanced profiles (explore,iosm_analyst,iosm_verifier,cycle_planner) - IOSM workspace —
iosm initbootstrapsiosm.yaml,IOSM.md,.iosm/artifacts - IOSM cycles —
iosm cycle plan|report|status|listfor systematic improvement - IOSM metrics — Six canonical metrics (semantic, logic, performance, simplicity, modularity, flow) with IOSM-Index
- Subagent orchestration — Parallel/sequential delegation with
/orchestrate - Custom agents — Markdown agent definitions in
.iosm/agents/ - Extension system — TypeScript extensions with tools, commands, hooks, and UI
- Skills — Markdown workflow modules
- Prompt templates — Reusable prompt snippets as slash commands
- Themes — JSON TUI theme customization
- Package manager —
iosm install|remove|update|listfrom npm/git/local - Session persistence — Automatic session saving and recovery
- Session branching —
/tree,/forkfor conversation tree navigation - HTML export —
/exportwith themed, self-contained HTML output - Session sharing —
/sharevia GitHub Gists - Session trace —
--session-tracefor full JSONL audit logging - Context compaction — Automatic context summarization when approaching limits
- File attachments —
@filesyntax for including files in prompts - Programmatic SDK —
createAgentSession()for embedding in custom apps - Keybinding customization —
~/.iosm/agent/keybindings.json - OAuth support —
/loginfor provider authentication - Permission controls —
/permissionsand/yolofor tool approval management
- Switched from monorepo
tsgoscripts to standalonetsc-based build system - Promoted CLI source, docs, examples, and tests to repository root
- Comprehensive README with feature showcase, provider reference, and examples
- 10 detailed documentation files covering all features
- CONTRIBUTING.md with development setup and PR guidelines
- 66 extension examples with categorized README
- 12 SDK examples with quick reference guide