Features

Complete reference for every user-facing feature in MultiTerminal. The application is a Windows desktop host for multiple Claude Code terminal sessions with integrated project management, team coordination, and institutional memory.

UI Panels (11 panels + controls)

MultiTerminal uses a VS-style docking framework (DockPanelSuite). All panels can be toggled from the toolbar, dragged to dock at any edge, floated as windows, or auto-hidden as slide-out tabs.

Tasks Panel (Kanban Board)

Toolbar button: Tasks  |  HTML: TasksPanel/tasks-panel.html

A full Kanban board with three columns: To Do, In Progress, and Done. Tasks are cards that display title, assignee, helper count, checklist progress, and priority. Drag-and-drop between columns changes task status. Click a card to view details, edit the plan, or manage the checklist.

Key interactions:

  • Click + New Task to create a task from the board
  • Drag cards between columns to change status
  • Click a card to expand details, plan, and checklist
  • Priority badges color-code urgency
  • Stale task indicators show tasks with no recent activity

Chat Panel

Toolbar button: Chat  |  HTML: ChatPanel/chat-panel.html

Real-time messaging between terminal sessions. Agents and users can send point-to-point messages or broadcasts. The panel shows a conversation thread with sender names, timestamps, and message content.

Key interactions:

  • Select a recipient from the terminal list dropdown
  • Type and send messages (Enter to send)
  • Use "Broadcast" to send to all registered terminals
  • Messages appear in real-time via WebSocket push
  • Chat history persists across sessions (view via History button)

Activity Panel

Toolbar button: Activity  |  HTML: ActivityPanel/panel.html

A real-time activity feed showing everything happening across all terminals. Events include tool usage (file reads, edits, bash commands), build events, subagent spawning, task status changes, and message sends.

Key interactions:

  • Events stream in real-time with terminal name, event type, and timestamp
  • Filter by event type or terminal
  • Color-coded event badges distinguish tool calls, builds, and errors
  • Useful as a "mission control" view when running multi-agent workflows

Project Panel

Toolbar button: Project  |  HTML: ProjectPanel/panel.html

Manage projects registered with MultiTerminal. View and edit project details, assign agents, configure MCP servers, manage named paths, store prompts, and enable specialist agents.

Key interactions:

  • Browse registered projects with search and filter
  • Edit project name, description, paths, build commands, and git settings
  • Assign agents with roles and preferred models
  • Configure MCP servers per project (enable/disable)
  • Manage specialist agents (verifier, debugger, security auditor, etc.)
  • Store reusable prompts and instructions

Profile Panel

Toolbar button: Profiles  |  HTML: ProfilePanel/panel.html

Displays team member profiles for all registered agents. Each profile shows avatar, display name, specialties, current availability, and role description.

Key interactions:

  • View all team member profiles in a grid or list layout
  • See agent specialties (e.g., "backend", "documentation", "testing")
  • Check availability status (active, idle, offline)
  • Profiles are created and updated by agents via MCP tools

Inbox Panel

Toolbar button: Inbox  |  HTML: InboxPanel/inbox-panel.html

Notification center for task updates, checklist transitions, message alerts, and system events. The inbox badge shows unread count on the toolbar button.

Key interactions:

  • View notifications grouped by task or type
  • Click a notification to navigate to the related task or message
  • Mark notifications as read individually or in bulk
  • Checklist transition notes appear as inbox items automatically
  • Reply to inbox items directly

Office Panel

Toolbar button: Office  |  HTML: OfficePanel/panel.html

An animated visualization of the team "office" showing agent presence and activity. Agents appear as characters in a pixel-art style office environment, with their status reflected in their visual state.

Key interactions:

  • See which agents are currently active (animated) or idle
  • Visual representation of the team workspace
  • Agent positions update based on registration and activity

Agent Panel

Toolbar button: Agent  |  HTML: AgentPanel/agent-panel.html

Observe spawned Claude Code team agents. When native Claude Code teams are active, this panel streams the transcript of each agent's conversation in real-time via the TeamWatcherService.

Key interactions:

  • Select a team agent from the dropdown to observe their work
  • Transcript streams in real-time (read-only observation)
  • See agent tool calls, reasoning, and outputs
  • Multiple agent panels can be opened simultaneously

File Preview Panel

Toolbar button: Preview  |  HTML: FilePreviewPanel/file-preview.html

A WebView2-based panel for previewing files directly within MultiTerminal. Supports rendering of HTML, Markdown, images, and other file types without leaving the application.

Key interactions:

  • Preview files from the project directory
  • Rendered output for supported file types (HTML, Markdown, images)
  • Integrated with the terminal workflow for quick file inspection

Start Screen

HTML: StartScreen/start-screen.html

The welcome screen displayed when MultiTerminal launches with no restored session. Shows registered projects with quick-launch buttons, recent sessions, and getting-started guidance.

Terminal Controls

Terminal Status Bar

HTML: Controls/TerminalStatusBar/statusbar.html

A 3-row status bar displayed below each terminal:

  • Row 1: Current folder path
  • Row 2: Model name, git branch, and status indicators
  • Row 3: Context window usage meter (tokens used / max)

Task HUD

Toolbar button: HUD  |  HTML: Controls/TaskHudPanel/task-hud.html

A heads-up display overlay on the active terminal showing the current task title, status, and checklist progress. Provides at-a-glance awareness of what the terminal is working on.

Per-Terminal Browser Tabs

Location: HUD area (tabbed WebView2 above terminal)  |  Source: Controls/HudTabContainer/

Each terminal has a tabbed browser area in its HUD where agents can open WebView2 tabs via MCP tools. Tabs can display URLs, raw HTML content, or full interactive web applications.

Capabilities
  • Open tabs: Load a URL or render raw HTML content (open_browser_tab)
  • Update content: Change a tab's HTML, URL, or title on the fly (set_browser_content)
  • Execute JavaScript: Run arbitrary JS in the tab and get the return value (execute_browser_script)
  • Read DOM elements: Query elements by CSS selector and read text, attributes, or innerHTML (get_browser_element_content)
  • Bidirectional messaging: Agent sends JSON to the page (post_browser_message); page sends JSON back via window.chrome.webview.postMessage() (get_browser_messages)
  • Push notifications: When a page calls postMessage(), the agent is notified automatically so it can react in real-time
  • Console logs: Read console.log/warn/error output from the tab for debugging (get_browser_console_logs)
  • Screenshots: Capture a PNG screenshot of the tab's rendered content (capture_browser_screenshot)
Use Cases
  • Live dashboards updated in real-time by the agent
  • Interactive HTML apps with button clicks routed back to the agent
  • Documentation and file previews
  • Visual debugging and DOM inspection
  • Drawing canvases, mini-games, and rich UI prototypes

See MCP Tools — Browser Tabs for the full 9-tool API reference.

Task Lifecycle Board

HTML: TaskLifecycleBoard/lifecycle-board.html

A detailed task lifecycle view showing the full progression of a task through its checklist items: pending, coding, testing, and done. Provides a more granular view than the kanban board.

Debug Panel

Toolbar button: Debug

Displays internal debug log messages from the application. Useful for troubleshooting MCP server issues, message delivery, WebView2 initialization, and database operations. Supports pause/resume and clear operations.

Terminal Management

ConPty Hosting

Each terminal tab hosts a ConPty (Windows Console Pseudo-Terminal) instance rendered inside a WebView2 control. This provides a full terminal emulator experience with proper ANSI escape code support, colors, cursor positioning, and resize handling.

Tab Creation & Management

  • New Terminal: Click "New Terminal" in the toolbar to open a fresh terminal tab
  • Tab Rename: Right-click a tab to rename it (sets the terminal's display identity)
  • Tab Close: Close tabs individually; the terminal process is terminated
  • Tab Reorder: Drag tabs to reorder within the dock panel
  • Grid Layouts: Use the Grid Layout dropdown to arrange terminals in 2x2, 2x3, 3x2, horizontal, or vertical layouts

Status Bar (3-Row Layout)

Each terminal has a status bar at the bottom rendered via WebView2:

  • Row 1 (Folder): Current working directory path
  • Row 2 (Model/Git): Active Claude model, git branch name, and dirty/clean indicator
  • Row 3 (Context): Visual progress bar showing context window token usage

Session Persistence

Terminal sessions are automatically saved and restored across application restarts:

  • Terminal identity (name), working directory, and Claude Code session ID are persisted
  • On restart, terminals are recreated with their previous identity and can resume Claude Code sessions
  • Session history is stored in SQLite for long-term access
  • The docking layout (panel positions, sizes, visibility) is saved as an XML layout file

Start Screen

When launching with no saved session, the Start Screen panel displays registered projects. Click a project to open a terminal in that project's directory with its configuration pre-loaded.

Kanban Board

Task & Checklist Lifecycle

Tasks move through todoin_progressdone, and each checklist item runs its own pendingcodingtestingdone cycle (with codingtesting looping when testing turns up a fix). Every transition carries a mandatory note that is delivered as an inbox notification. For the full state machines, the one-active-task rule, and the testing gate, the Kanban Workflow guide is the canonical reference.

Plans

Tasks can have a markdown plan field describing the implementation approach. Plans are written by agents during the planning phase and serve as the work specification.

Helpers

Additional agents can be assigned as "helpers" to a task. The helper system allows multiple agents to collaborate on a single task, each handling different aspects of the work.

Continuation Notes

Free-text field for session handoff context. When an agent's session ends mid-task, continuation notes capture the current state so the next session (or a different agent) can pick up where it left off.

Stale Task Tracking

Tasks with no recent activity are flagged as "stale" by the StaleTaskService. This helps identify blocked or abandoned work items that need attention.

Priority System

Tasks can be assigned priority levels that affect their visual presentation on the board. Higher-priority tasks are highlighted with color-coded badges.

Git Worktree Isolation

When worktree mode is enabled (MULTITERMINAL_WORKTREE_MODE=on), claiming a task automatically gives each agent its own git worktree, so multiple agents can work on different tasks — or different parts of the same task — without stepping on each other's files.

  • Auto-create on claim: the assignee gets a canonical task/<id> branch; each helper gets task/<id>--<slug>
  • Auto-merge & prune on done: work is committed, merged back to the trunk, and the worktree directory is removed
  • HUD git panel rebinds to the active task's worktree as you switch tasks
  • Clean cwd moves via EnterWorktree/ExitWorktree (Claude Code ≥ 2.1.157)

Full walkthrough: Git Worktrees guide.

Messaging

Point-to-Point Chat

Any registered terminal can send a direct message to any other registered terminal. Messages are routed through the MessageBroker and delivered to the recipient's terminal via webhook injection.

Broadcasts

A terminal can broadcast a message to all other registered terminals simultaneously. Broadcasts are used for team-wide announcements.

Inbox Notifications

The inbox system delivers notifications for:

  • New messages directed at your terminal
  • Task assignment changes (claimed, status updated)
  • Checklist transitions with notes
  • Helper assignments
  • System events (stale task warnings)

Reliable Delivery

Messages use a reliable delivery system backed by the messages.db database:

  • Messages are queued in SQLite before delivery
  • Failed deliveries are retried on a timer (every 2 seconds)
  • Message deduplication prevents double-delivery
  • Messages expire after a configurable TTL

Real-Time Delivery (Channels)

When a message arrives for a terminal, it is delivered through Claude Code's native Channels transport: the message appears in the session as a structured <channel> event the agent reacts to immediately, and the agent replies with the channel's reply/send tools — no polling required. This replaces the older [cm] ConPTY "check messages" nudge. See Channels (Messaging) for how it works and the setting it requires.

Project Management

Project Registration

Projects are registered in SQLite with metadata including:

  • Name, description, and primary path
  • Source path and deploy path
  • Build command
  • Git repository URL, default branch, and auto-commit preference
  • Pinned status for quick access

Context Service

The ProjectContextService provides a single API call (GET /api/projects/{id}/context) that returns everything an agent needs to know about a project: core details, agents, MCP servers, specialist agents, named paths, prompts, and skills.

Agent Assignment

Projects can have named agents assigned with roles (lead, member) and preferred Claude models. This determines which agents are spawned when working on the project.

MCP Configuration

Each project can have MCP servers configured and enabled/disabled. The McpConfigService generates .mcp.json files from the registry for Claude Code consumption.

Specialist Agents

Projects can enable specialist agents with custom prompts:

  • Verifier: Confirms work is genuinely complete after coding
  • Devils Advocate: Scores plans 0-100, blocks bad approaches
  • Test Designer: Generates acceptance criteria per checklist item
  • Security Auditor: OWASP Top 10 scanning, injection detection
  • Debugger: Root cause analysis when testing fails
  • Code Reviewer: Quality, patterns, naming, and consistency review
  • Session Distiller: Compresses session learnings into memory
  • Session Summarizer: Generates session recaps from JSONL transcripts

New Project Wizard

The /new-project skill provides a 13-step conversational wizard for registering new projects. It supports 5 archetypes: Clarion COM, WebView2, Clarion App, MT Feature, and Generic C#.

Team & Agent System

Native Claude Code Teams

MultiTerminal supports Claude Code's native team agent system (requires CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1). Teams are created via TeamCreate, and agents are spawned as subagents that appear in the Agent Panel.

Spawned Agents (AgentProcess)

The TerminalSpawner service can launch Claude Code processes programmatically. Each spawned agent:

  • Gets its own terminal with a unique identity
  • Is registered in the messaging system automatically
  • Can communicate with other terminals via MCP tools
  • Has its transcript monitored by TeamWatcherService

TeamWatcherService

Monitors JSONL transcript files produced by native team agents. Streams transcript events to the Agent Panel in real-time using a file-tailing approach (TranscriptTailer).

Agent Naming Convention

SystemFormatExampleUse For
MultiTerminalPlain nameAlice, DianaPlanning/design (interactive)
Native Teams"Agent " prefixAgent AliceCoding sprints (parallel)

Code Intelligence (Code Graph & Wiki)

MultiTerminal indexes your C# codebase so agents can reason about it structurally instead of grepping blindly.

Code Graph

A Roslyn-based two-pass indexer extracts symbols (classes, methods, properties, constructors) and relationships (calls, inherits, implements, overrides, references). Agents query it to find callers/callees, walk inheritance trees, run impact analysis before a change, and surface dead code. A background watcher keeps the graph fresh automatically — it heals stale graphs on startup and re-indexes projects as their .cs files change, so queries reflect current code without a manual re-index.

Guide: Code Graph.

Wiki Generator & Branch Outcomes

The wiki generator auto-writes per-subsystem articles from the code graph (stored under .claude/wiki/). Branch outcomes let you attach a one-sentence, user-facing capability statement to a branch so it reads as a feature, not a commit log.

Guide: Branch Outcomes & Wiki.

Institutional Memory

MultiTerminal implements a host-controlled memory system that replaces the traditional agent-controlled approach to context management.

Why Host-Controlled?

In a standard Claude Code setup, context comes from two agent-controlled sources:

  • CLAUDE.md — a static file the agent reads every session, same content regardless of relevance
  • memory.md — Claude's built-in memory where the agent decides what to store and recall

This has three problems: (1) static content wastes tokens on irrelevant knowledge, (2) the agent chooses what to remember rather than what's proven useful, and (3) every agent sees the same global context regardless of role.

MultiTerminal inverts this. The desktop host — via hooks that run before the agent sees any prompt — controls three things the agent used to control:

WhatBefore (Agent-Controlled)Now (Host-Controlled)
Knowledge in context Agent reads static CLAUDE.md every session Hook queries SQLite, ranks by attention decay, injects top entries dynamically
Rules each agent sees One global CLAUDE.md for all agents Per-agent system prompt file tailored to role (--system-prompt-file)
Hooks & settings All agents inherit user-level hooks and settings Spawned agents scoped to project+local only (--setting-sources project --setting-sources local)

The primary terminal (e.g., Alice) still uses CLAUDE.md for project-specific instructions, but knowledge injection and session continuity are handled by hooks. Spawned team agents bypass CLAUDE.md entirely and receive only their generated system prompt.

Knowledge Base

The knowledge base stores reusable insights organized into 6 semantic categories:

CategoryPurposeExample
decisionArchitectural and design decisions"Chose SQLite over JSON files for project storage"
patternEstablished coding patterns"All panels follow Initialize(broker) + ApplyTheme(isDark) pattern"
gotchaNon-obvious pitfalls"WebView2 init blocks UI thread if done in constructor"
anti_patternThings to avoid"Never use $env:VARNAME in Bash tool - gets mangled"
debug_insightDebugging discoveries"SplitterMoved fires during restore, corrupting ratios"
preferenceUser/team preferences"Always use PowerShell syntax in terminal commands"

Confidence Levels

Each knowledge entry has a confidence level:

  • observed: Seen once, may need verification
  • confirmed: Verified across multiple interactions
  • deprecated: Superseded by newer knowledge

Attention Decay

Knowledge entries that are actively referenced stay prominent; stale entries fade out. Each entry tracks:

  • reference_count — incremented every time the entry is returned by a search or injected at session start
  • last_referenced — timestamp of most recent access

At session start, the session-status-hook.js ranks all knowledge entries using the decay formula:

score = (reference_count + 1) / (days_since_last_referenced + 1)

Injection is tiered by rank:

TierRankInjection
FullTop 10Title + 200-character content preview
Title-onlyNext 5Title only (use query_knowledge for details)
AvailableRestNot injected — queryable on demand via MCP tool

This ensures frequently-used knowledge stays in context while rarely-accessed entries don't waste tokens. Old entries that are still actively referenced retain high scores.

Code Digests

Compressed summaries of codebase structure that agents can query to understand the project without reading every file. Digests capture file purposes, key classes, and relationships.

Session Lineage

Tracks the chain of Claude Code sessions for a terminal identity, enabling agents to understand the history of work done on a project across multiple sessions.

Full-Text Search

The knowledge database supports full-text search across all entries, enabling agents to query institutional memory with natural language. Searches automatically bump the reference_count and last_referenced timestamp of returned entries, feeding the attention decay system.

Settings & Theme

Dark / Light Theme

Toggle between dark and light themes using the sun/moon button in the toolbar. The theme applies to:

  • Main form and toolbar
  • All docking panels
  • All WebView2 HTML panels (via ApplyTheme callback)
  • Terminal background and text colors

Font Settings

The Settings dialog (WPF-based) allows configuring:

  • Terminal font family and size
  • Font changes propagate to all open terminals in real-time

Docking Layout

Panel positions, sizes, and visibility are saved automatically when the application closes and restored on next launch. The layout is stored as an XML file.

Grid Layout Presets

The Grid Layout dropdown provides preset arrangements for terminal tabs:

  • 2x2, 2x3, 3x2 grids
  • 2 or 3 horizontal splits
  • 2 or 3 vertical splits
  • Reset to Tabs (single tabbed view)

Toolbar

The main toolbar contains buttons for all panel toggles, layout controls, and settings:

New Terminal | Project | Chat | History | Help | Activity | Tasks | Profiles | Inbox | Office | Debug | File Preview | Recent | Grid Layout | Theme | Settings | About

Dialogs

Modal dialogs for specific operations:

DialogPurposeOpened Via
Settings (WPF) Configure terminal font, size, and application preferences Toolbar gear button
New Project (WPF) Register a new project with paths, build command, and git config Project panel "New" button
Project Manager Browse, edit, and manage all registered projects Project panel
Edit Project Edit details of a specific project Project Manager dialog
Chat History View historical chat messages with search and filtering Toolbar "History" button
Session Viewer Browse Claude Code session history and metadata Terminal context menu
Identity Picker Select or create a terminal identity (name) for session resumption Terminal startup
Rename Tab Rename a terminal tab (changes the display name) Right-click terminal tab
Save Prompt Save a reusable prompt to the project's prompt collection Project panel
Owner Profile (WPF) Manage owner identity, display name, avatar, and git configuration Toolbar profile button
About Application version, build info, and credits Toolbar info button

Remote & Phone Access (Multi-Connect)

The current, recommended way to reach MultiTerminal from your phone is Multi-Connect — an in-app gateway published over your private Tailscale network. It serves a mobile PWA for task access without exposing anything to the public internet.

Set it up: open Settings → Multi-Connect (Detect Tailscale, Test, Copy hostname), or run the /multi-connect-setup skill, which brings the Tailscale node up, publishes the loopback gateway over HTTPS with tailscale serve, and prints your phone URL.

Full walkthrough: Multi-Connect (Phone) guide.

Mobile features include a kanban task board, terminal management, an interactive console, chat with voice input, and Web-Push notifications.

Mobile Features (Phone PWA)

FeatureDescription
Task BoardView and manage kanban tasks with checklist status
Terminal ManagementList running terminals and spawn new ones from your phone
Interactive ConsoleFull xterm.js terminal via WebSocket — type commands from your phone
Chat MessagingSend messages to agents with voice input (Web Speech API)
Push NotificationsNative phone notifications for task updates, messages, and alerts (Web Push API + VAPID)
Live CommentaryOptional TTS commentary on agent activity via edge-tts
PWA SupportAdd to home screen, works offline-first with service worker

Notifications flow from Claude Code hooks → NotificationsController → the active gateway → Web Push to subscribed phones.

Presence-Aware Routing

MultiTerminal can sense whether you're at your desk and route agent questions accordingly — to the desktop when you're present, or to phone-push when you've stepped away.

  • At desk — mmWave radar (Apollo MSR-2 / ESP32-C3) detects you at the machine
  • Nearby — a registered phone's BLE signal is above its threshold
  • Away — neither; questions and elicitations relay to your phone

Presence drives the remote-mode gate (debounced to avoid flapping). Setup and tuning: Presence Sensors guide.