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.
On This Page
- UI Panels (11 panels + controls)
- Terminal Management
- Kanban Board
- Git Worktree Isolation
- Messaging
- Project Management
- Team & Agent System
- Code Intelligence (Code Graph & Wiki)
- Institutional Memory
- Settings & Theme
- Dialogs
- Remote & Phone Access (Multi-Connect)
- Presence-Aware Routing
Newer subsystems each have a dedicated guide: Git Worktrees · Multi-Connect · Presence Sensors · Code Graph · Branch Outcomes & Wiki.
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 viawindow.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 todo → in_progress → done, and each checklist item runs its own pending → coding → testing → done cycle (with coding ↔ testing 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 getstask/<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
| System | Format | Example | Use For |
|---|---|---|---|
| MultiTerminal | Plain name | Alice, Diana | Planning/design (interactive) |
| Native Teams | "Agent " prefix | Agent Alice | Coding 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:
| What | Before (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:
| Category | Purpose | Example |
|---|---|---|
decision | Architectural and design decisions | "Chose SQLite over JSON files for project storage" |
pattern | Established coding patterns | "All panels follow Initialize(broker) + ApplyTheme(isDark) pattern" |
gotcha | Non-obvious pitfalls | "WebView2 init blocks UI thread if done in constructor" |
anti_pattern | Things to avoid | "Never use $env:VARNAME in Bash tool - gets mangled" |
debug_insight | Debugging discoveries | "SplitterMoved fires during restore, corrupting ratios" |
preference | User/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:
| Tier | Rank | Injection |
|---|---|---|
| Full | Top 10 | Title + 200-character content preview |
| Title-only | Next 5 | Title only (use query_knowledge for details) |
| Available | Rest | Not 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
ApplyThemecallback) - 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:
| Dialog | Purpose | Opened 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)
| Feature | Description |
|---|---|
| Task Board | View and manage kanban tasks with checklist status |
| Terminal Management | List running terminals and spawn new ones from your phone |
| Interactive Console | Full xterm.js terminal via WebSocket — type commands from your phone |
| Chat Messaging | Send messages to agents with voice input (Web Speech API) |
| Push Notifications | Native phone notifications for task updates, messages, and alerts (Web Push API + VAPID) |
| Live Commentary | Optional TTS commentary on agent activity via edge-tts |
| PWA Support | Add 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.