Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
195 commits
Select commit Hold shift + click to select a range
b9bc6b4
feat: add maestro:// deep link protocol and clickable OS notifications
pedramamini Mar 4, 2026
96be37d
fix: address PR review feedback for deep links
pedramamini Mar 4, 2026
df9c61d
feat: add deep link template variables, shared URL builders, and docs
pedramamini Mar 4, 2026
089b835
feat: stream real-time history entries into Director's Notes with liv…
pedramamini Mar 4, 2026
dce2e6d
fix: address PR review — stable ref pattern, deduplicated counters, c…
pedramamini Mar 4, 2026
c03d9e3
feat: gate Maestro Symphony behind Encore Features toggle, add multi-…
pedramamini Mar 4, 2026
bbb51f7
fix: address CodeRabbit PR review findings for encore-features
pedramamini Mar 4, 2026
f11f9d5
MAESTRO: Phase 01 - Cue foundational types, template variables, logge…
pedramamini Mar 1, 2026
d8feb25
MAESTRO: Phase 02 - Cue Engine core, YAML loader, and file watcher pr…
pedramamini Mar 1, 2026
21bbcbc
MAESTRO: Phase 03 - Cue executor for background agent spawning and hi…
pedramamini Mar 1, 2026
03ef759
MAESTRO: Phase 04 - IPC handlers, preload API, and CueEngine initiali…
pedramamini Mar 1, 2026
b812631
MAESTRO: Phase 05 - CUE type rendering in History panel and detail modal
pedramamini Mar 1, 2026
d79064d
MAESTRO: Phase 05 - CUE log level test coverage for LogViewer component
pedramamini Mar 1, 2026
967acec
MAESTRO: Phase 06 - Cue Modal dashboard with sessions, active runs, a…
pedramamini Mar 1, 2026
b3c568d
MAESTRO: Phase 07 - Cue YAML Editor with AI-assisted prompt generation
pedramamini Mar 1, 2026
d7f39a4
MAESTRO: Phase 08 - Cue Help Modal and auto-discovery of maestro-cue.…
pedramamini Mar 1, 2026
9483dee
MAESTRO: Phase 09 - Agent completion chains with fan-out, fan-in, and…
pedramamini Mar 1, 2026
860ea69
MAESTRO: Phase 10 - YAML hot reload with config change/removal detect…
pedramamini Mar 1, 2026
7c2c3fd
MAESTRO: Phase 10 - Cue status indicator in session list (Encore Feat…
pedramamini Mar 1, 2026
864ff9f
MAESTRO: Phase 10 - Update documentation tables with Cue references
pedramamini Mar 1, 2026
4035a94
MAESTRO: Phase 11 - Per-agent concurrency control and event queuing
pedramamini Mar 1, 2026
1fadfdb
MAESTRO: Phase 12 - Sleep/wake reconciliation with heartbeat and even…
pedramamini Mar 1, 2026
95921f2
MAESTRO: Phase 13 - Event payload filtering for Cue subscriptions
pedramamini Mar 1, 2026
172659a
MAESTRO: Phase 14 - Named coordination pattern presets and AI pattern…
pedramamini Mar 1, 2026
ba55f46
MAESTRO: Phase 01 - GitHub polling foundation (types, DB, poller module)
pedramamini Mar 4, 2026
59a1ab7
MAESTRO: Phase 02 - GitHub polling integration (engine, YAML, executo…
pedramamini Mar 4, 2026
76d9307
MAESTRO: Phase 03 - Add GitHub pattern presets (PR Review, Issue Tria…
pedramamini Mar 4, 2026
42de16a
MAESTRO: Sync CueEventType across preload and renderer with GitHub ev…
pedramamini Mar 4, 2026
05bcf7d
MAESTRO: Add GitHub event documentation to Cue Help Modal
pedramamini Mar 4, 2026
866a69e
MAESTRO: Add GitHub event payload display to Cue activity log
pedramamini Mar 4, 2026
001f248
MAESTRO: Add GitHub event types to CueYamlEditor YAML template and AI…
pedramamini Mar 4, 2026
338afa3
MAESTRO: Add task.pending event type to Cue automation system
pedramamini Mar 5, 2026
2c44f35
MAESTRO: Update CLAUDE.md Cue description to include all trigger types
pedramamini Mar 5, 2026
7be267d
Replace hardcoded tool detail extractors with generic summarizeToolInput
pedramamini Mar 5, 2026
71a4abf
feat: add "Run All Phases" toggle to wizard and resize modal
pedramamini Mar 3, 2026
276d015
fix: address PR review — add type="button" and ariaLabel to ToggleSwitch
pedramamini Mar 4, 2026
782e933
fix: resolve type errors from branch merges
pedramamini Mar 6, 2026
8ee7410
feat: add Create Worktree command to command palette with auto-focus
pedramamini Mar 4, 2026
d3b9112
fix: format symphony-registry.json and register font size shortcuts
pedramamini Mar 4, 2026
54c747b
feat: add --read-only flag to maestro-cli send command
pedramamini Mar 5, 2026
a9bca7f
feat: add unread agents filter toggle with Cmd+Shift+U shortcut
pedramamini Mar 5, 2026
14dcfbb
fix: resolve tsconfig.main.json build errors from branch merges
pedramamini Mar 6, 2026
931fb36
feat: add Copy Deep Link option to tab overlay menu
pedramamini Mar 6, 2026
339ffc7
fix: pass app entry point in dev-mode protocol registration
pedramamini Mar 6, 2026
b3fffaa
refactor: move Usage & Stats settings from General tab to Encore Feat…
pedramamini Mar 6, 2026
4def637
Gate CUE history filter on maestroCue encore feature and fix crowded …
pedramamini Mar 6, 2026
1085abb
fix: count only agents with entries in lookback window for Director's…
pedramamini Mar 6, 2026
b870ed7
fix: match unread agent indicator dot position to tab unread pattern
pedramamini Mar 6, 2026
3f3d8a7
docs: move Usage Dashboard and Maestro Symphony under Encore Features…
pedramamini Mar 6, 2026
8768714
Add CUE entry type to History Panel help modal when maestroCue is ena…
pedramamini Mar 6, 2026
3170a69
Add comprehensive Maestro Cue user documentation (4 pages)
pedramamini Mar 6, 2026
2afa0ef
feat: show View history link on files tab during batch run
pedramamini Mar 6, 2026
a9abd18
refactor: reorder Encore Features, remove BETA from Usage Dashboard
pedramamini Mar 6, 2026
b1711ed
Add Cue YAML editor, context menu integration, and fix help modal z-i…
pedramamini Mar 6, 2026
0fc69c7
Add tests for cueYamlEditor modal and Configure Maestro Cue command p…
pedramamini Mar 6, 2026
b8071e7
Move Configure Maestro Cue below Configure Worktrees in context menu
pedramamini Mar 6, 2026
ccfea7a
Center history filter pills when CUE type adds a third row
pedramamini Mar 6, 2026
b851997
Add conversational AI Assist chat to CueYamlEditor with agent spawn a…
pedramamini Mar 6, 2026
94eded3
version bump
pedramamini Mar 6, 2026
f250a0c
ignore Cue files
pedramamini Mar 6, 2026
d24c744
Add Cue Examples cookbook page and document triggeredBy filter field
pedramamini Mar 6, 2026
70987a6
Rename Cancel to Exit in CueYamlEditor and pass cueShortcutKeys to Cu…
pedramamini Mar 6, 2026
2198597
Add missing Cue template variables for file changeType and agent comp…
pedramamini Mar 6, 2026
bb6f4ed
fix: check sessionSshRemoteConfig as primary SSH remote ID source
pedramamini Mar 6, 2026
882eb61
fix: always show .maestro folder in file tree regardless of ignore pa…
pedramamini Mar 6, 2026
4c52713
fix: update CueHelpModal -> CueHelpContent import after rename in mae…
pedramamini Mar 6, 2026
6ff5907
Add Cue Graph visualizer tab, standardize modal sizes, and inline hel…
pedramamini Mar 6, 2026
01347a1
Use theme accent instead of hardcoded Cue teal for toggles, borders, …
pedramamini Mar 6, 2026
01bcb92
MAESTRO: Add pipeline types and React Flow canvas foundation for Cue …
pedramamini Mar 7, 2026
da8d6e3
MAESTRO: Add custom node types and pipeline edge for Cue visual editor
pedramamini Mar 7, 2026
8f96d66
MAESTRO: Add trigger and agent drawers with drag-and-drop for Cue pip…
pedramamini Mar 7, 2026
bb8d0d7
MAESTRO: Add pipeline lifecycle management with selector dropdown, co…
pedramamini Mar 7, 2026
ee0e1a4
MAESTRO: Add node and edge configuration panels for Cue pipeline editor
pedramamini Mar 7, 2026
f8ebb78
MAESTRO: Add pipeline-to-YAML conversion utility for Cue visual editor
pedramamini Mar 7, 2026
92c2129
MAESTRO: Add YAML-to-pipeline reverse conversion for Cue visual editor
pedramamini Mar 7, 2026
83aeb84
MAESTRO: Integrate YAML conversion into pipeline editor with save/loa…
pedramamini Mar 7, 2026
d73ebfd
MAESTRO: Add pipeline layout persistence via IPC for Cue visual editor
pedramamini Mar 7, 2026
5a14074
MAESTRO: Update CueModal to use Pipeline Editor as default tab and re…
pedramamini Mar 7, 2026
d9f6e25
MAESTRO: Add pipeline-aware status indicators to CueModal Dashboard tab
pedramamini Mar 7, 2026
9bf1f22
MAESTRO: Add polish features to Cue visual pipeline editor
pedramamini Mar 7, 2026
75ea258
MAESTRO: Fix empty pipeline graph and add drawer improvements
pedramamini Mar 7, 2026
7531612
fix: improve light theme contrast for syntax highlighting and colors
pedramamini Mar 7, 2026
9e543b0
fix: include busy agents in unread agents filter
pedramamini Mar 7, 2026
bb99ff6
MAESTRO: Add layout algorithms and node dragging to Cue graph view
pedramamini Mar 7, 2026
7a03ace
MAESTRO: Fix pipeline editor UI issues and add legend/auto-config
pedramamini Mar 7, 2026
4b59988
fix: suppress empty groups and New Group button in unread agents filter
pedramamini Mar 7, 2026
ca6632e
[Symphony] Start contribution for #160
pedramamini Mar 1, 2026
de620a0
MAESTRO: Phase 1 — install xterm.js and create XTerminal component
pedramamini Mar 1, 2026
adb1fed
MAESTRO: Phase 2 — TerminalTab interface and unified tab type extensions
pedramamini Mar 1, 2026
85bcd11
MAESTRO: Phase 3 — terminalTabHelpers.ts pure function library
pedramamini Mar 1, 2026
ff30c06
MAESTRO: Phase 4 — session initialization, migration, and persistence…
pedramamini Mar 1, 2026
b9521d0
MAESTRO: Phase 5 — main process PTY management for terminal tabs
pedramamini Mar 1, 2026
66e3efc
MAESTRO: Phase 6 — TerminalView component for terminal tab rendering
pedramamini Mar 1, 2026
65757c6
MAESTRO: Phase 7 — tab store integration and terminal tab handlers
pedramamini Mar 1, 2026
448e629
MAESTRO: Phase 8 — TabBar rendering for terminal tabs
pedramamini Mar 1, 2026
42e8eea
MAESTRO: Phase 9 — Keyboard shortcuts for terminal tabs
pedramamini Mar 1, 2026
d47f493
MAESTRO: Phase 10 — Terminal search UI overlay
pedramamini Mar 1, 2026
65d833a
MAESTRO: Phase 11 — Theme integration and ANSI color configuration
pedramamini Mar 1, 2026
ee7c1b8
MAESTRO: Phase 12 — Terminal tab rename modal
pedramamini Mar 1, 2026
1f2baec
MAESTRO: Phase 13 — Cleanup, migration, testing, and polish
pedramamini Mar 1, 2026
a6c77b1
MAESTRO: Verify and fix terminal tab persistence across app restarts
pedramamini Mar 1, 2026
a1044a8
MAESTRO: Fix SSH field name bug in terminal tab PTY spawning
pedramamini Mar 1, 2026
56d815f
MAESTRO: Fix terminal search next/previous query tracking bug
pedramamini Mar 1, 2026
91300dc
MAESTRO: Phase 7 — Fix terminal tab navigation in unified tab system
pedramamini Mar 1, 2026
430fa43
MAESTRO: Guard shellLogs appends — only write when no terminalTabs (l…
pedramamini Mar 1, 2026
a2f42bc
MAESTRO: Phase 13 — Remove unused enterToSendTerminal and stale eslin…
pedramamini Mar 1, 2026
08b4240
MAESTRO: Phase 13 — Update test mocks with terminalTabs fields and fi…
pedramamini Mar 1, 2026
351fca6
MAESTRO: Phase 13 — Add Terminal Tab System section to ARCHITECTURE.md
pedramamini Mar 1, 2026
b70c960
MAESTRO: Address PR #486 review comments from CodeRabbit and Greptile
pedramamini Mar 1, 2026
9a690b0
MAESTRO: Document intentional useEffect dep omission in TerminalView
pedramamini Mar 1, 2026
a7b6761
MAESTRO: Update tests for PR #486 review fixes
pedramamini Mar 1, 2026
b3f6f88
style: ran formatter to conform to standards
reachraza Mar 2, 2026
a9fe1c0
fix: resolve TS errors in TerminalOutput test after merge conflict re…
reachraza Mar 2, 2026
bdc78a8
fix: 0.15.0-RC polish round two — error details & lookback default (#…
pedramamini Mar 3, 2026
38c2044
docs: sync release notes for v0.15.1
github-actions[bot] Mar 3, 2026
8fca760
[Symphony] Start contribution for #160
pedramamini Mar 1, 2026
199e4cb
MAESTRO: Fix four terminal tab integration bugs
pedramamini Mar 5, 2026
91885f2
fix: address CodeRabbit review findings across refactored components
reachraza Mar 3, 2026
e1311b1
refactor: decompose SessionList into focused sub-components and hooks
reachraza Mar 4, 2026
e84ace5
Add 'bills-bot' entry to symphony-registry.json (#388)
BillChirico Mar 4, 2026
1669be4
[Symphony] Start contribution for #160
pedramamini Mar 1, 2026
3290e27
[Symphony] Start contribution for #160
pedramamini Mar 1, 2026
e9ae2b5
MAESTRO: Fix four terminal tab integration bugs
pedramamini Mar 5, 2026
543b593
fix: terminal tab rename keyboard shortcut and defensive cwd fallback
pedramamini Mar 5, 2026
7db6c3b
fix: resolve 7 terminal tab integration issues (#160)
pedramamini Mar 5, 2026
6e2ab72
fix: reset inputMode when switching from terminal to AI/file tabs
pedramamini Mar 6, 2026
9ac43b7
fix: terminal tabs now connect to SSH remote host when session SSH is…
pedramamini Mar 6, 2026
1d509c9
feat: show terminal tabs in tab switcher modal; fix xterm repaint on …
pedramamini Mar 6, 2026
d1de877
fix: close AI tab falls back to correct neighbor using unifiedTabOrder
pedramamini Mar 6, 2026
6e7e2a8
fix: preserve terminal content when returning from AI mode via isVisi…
pedramamini Mar 6, 2026
d121734
fix: closeTerminalTab falls back to correct neighbor using unifiedTab…
pedramamini Mar 6, 2026
0e26b13
fix: persist terminal tab content across session switches
pedramamini Mar 6, 2026
42bf61f
fix: defer WebGL addon load until terminal container is visible
pedramamini Mar 7, 2026
fd1ccc8
fix: terminal tabs on SSH agents now connect to the remote host
pedramamini Mar 7, 2026
344323a
fix: use visibility:hidden instead of display:none for terminal keep-…
pedramamini Mar 7, 2026
7718783
fix: SSH terminal tabs now actually connect to remote host
pedramamini Mar 7, 2026
3e276f6
remove obsolete terminalWidth setting; update log buffer description
pedramamini Mar 7, 2026
9cc5e59
test: add PtySpawner tests covering SSH terminal and shell terminal p…
pedramamini Mar 7, 2026
9208de7
fix: always mount terminal sessions regardless of file preview / AI view
pedramamini Mar 7, 2026
32ef410
test: add XTerminal and terminalTabHelpers coverage
pedramamini Mar 7, 2026
30dbe8a
fix: remove scroll-to-bottom arrow indicator from terminal output view
pedramamini Mar 7, 2026
de62bb0
fix: terminal visual polish and keyboard handler cleanup
pedramamini Mar 7, 2026
5914a92
fix: resolve lint warnings, stale tests, and two cue bugs
pedramamini Mar 7, 2026
dc95a91
MAESTRO: Add drag handles and gear icons to pipeline editor nodes
pedramamini Mar 7, 2026
c8c4961
feat: add empty state for unread agents filter with centered Bot icon
pedramamini Mar 7, 2026
a38015a
fix: terminal tab bugs, cue hotkey, and XTerminal WebGL load order
pedramamini Mar 7, 2026
8681a50
fix: group agents by user-defined groups in Cue Pipeline Editor drawer
pedramamini Mar 7, 2026
5b323a2
## CHANGES
pedramamini Mar 7, 2026
6d32176
feat: split agent prompt into input/output, add pipeline color picker…
pedramamini Mar 7, 2026
061decc
refactor: consolidate Maestro project files under .maestro/ directory
pedramamini Mar 7, 2026
0c742b6
test: update tests for .maestro/ directory migration
pedramamini Mar 7, 2026
6ba7f2f
fix: resolve test failures from .maestro/ migration
pedramamini Mar 7, 2026
8eabff6
feat: add Edit YAML button to Cue dashboard and show sessions when en…
pedramamini Mar 7, 2026
f1ecbd9
feat: add output_prompt support to Cue pipeline agents
pedramamini Mar 7, 2026
7942808
feat: replace pattern preset replace-all with copy-to-clipboard preview
pedramamini Mar 7, 2026
e48009b
## CHANGES
pedramamini Mar 8, 2026
d695187
## CHANGES
pedramamini Mar 8, 2026
c657a9a
## CHANGES
pedramamini Mar 8, 2026
e0e2f22
## CHANGES
pedramamini Mar 8, 2026
3e1751e
feat: add image support to group chat (display, persistence, agent fo…
pedramamini Mar 8, 2026
e2bd571
test: add tests for Cue modal escape-from-help and unsaved changes co…
pedramamini Mar 8, 2026
756b2a5
chore: remove beta badge from Storage Location setting
pedramamini Mar 8, 2026
a4b94c2
fix: restore "All Pipelines" selection on Pipeline Editor load
pedramamini Mar 8, 2026
373e7ac
feat: append active theme to runmaestro.ai URLs
pedramamini Mar 8, 2026
13b9d8e
feat: add theme-hint script for Mintlify docs
pedramamini Mar 8, 2026
9912801
## CHANGES
pedramamini Mar 8, 2026
d5eb1b6
fix: resolve pipeline-dashboard mismatch by adding agent_id binding a…
pedramamini Mar 8, 2026
e3292b3
feat: rename time.interval to time.heartbeat and add time.scheduled t…
pedramamini Mar 8, 2026
77f25b9
feat: add Alt+J shortcut to jump to closest terminal tab
pedramamini Mar 8, 2026
ba9d83a
fix: hide unread agents filter button when left sidebar is collapsed
pedramamini Mar 8, 2026
51589c6
- Release workflow now auto-marks RC/beta/alpha tags as prereleases 🎯
pedramamini Mar 8, 2026
821aa28
fix: auto-close terminal tab when shell process exits
pedramamini Mar 8, 2026
d428726
fix: close terminal tab immediately on shell exit instead of 300ms delay
pedramamini Mar 8, 2026
c811297
feat: respect unread filter when cycling agents with Cmd+[/]
pedramamini Mar 8, 2026
0cf1357
- Cue YAML subscriptions now accept `agent_id` for binding runs to se…
pedramamini Mar 8, 2026
0787a2a
fix: improve tab naming reliability, Cue pipeline targeting, and UI p…
pedramamini Mar 8, 2026
3baeef7
fix: always show indicator dot on unread agents filter icon
pedramamini Mar 8, 2026
45ae158
fix: always show .maestro directory in file tree even when dotfiles a…
pedramamini Mar 8, 2026
51780f5
feat: add per-trigger prompts, custom trigger labels, and manual Run …
pedramamini Mar 8, 2026
a342bb1
feat: staged splash screen with orchestra warm-up theme
pedramamini Mar 8, 2026
3a81ae8
feat: add expand/collapse toggle to Cue pipeline config drawer
pedramamini Mar 9, 2026
55cddc7
fix: stop auto-creating terminal tabs for new sessions
pedramamini Mar 9, 2026
ca67d48
fix: keep active worktree session visible under unread-only filter
pedramamini Mar 9, 2026
cdd3bd0
fix: post-rebase cleanup — fix runtime crash, remove orphaned code, u…
pedramamini Mar 9, 2026
55ee392
fix: use stdin passthrough for SSH remote Group Chat large prompts
pedramamini Mar 9, 2026
c9ce494
fix: auto-focus AI input when switching from terminal to AI mode
pedramamini Mar 9, 2026
a88b09e
## CHANGES
pedramamini Mar 10, 2026
c5d4f5c
feat: remap Cmd+0 to jump to last tab, Cmd+Shift+0 to reset font size
pedramamini Mar 10, 2026
bbd7f8b
## CHANGES
pedramamini Mar 10, 2026
7845b66
fix: account for sticky overlays when scrolling active tab into view
pedramamini Mar 10, 2026
7de2dcf
fix: correct Cue Modal shortcut in docs from Cmd+Shift+Q to Option+Q
pedramamini Mar 10, 2026
ccc1828
feat: add jump-to-agent buttons in System Process Viewer
pedramamini Mar 10, 2026
23268d6
feat: confirm before closing tabs with unsent drafts
pedramamini Mar 11, 2026
ede68dc
MAESTRO: add argument denylist for sessionCustomArgs injection (TASK-…
openasocket Mar 8, 2026
e3795d9
MAESTRO: harden Windows shell argument escaping and add shell:false o…
openasocket Mar 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ jobs:
files: artifacts/release/*
fail_on_unmatched_files: false
draft: false
prerelease: false
prerelease: ${{ contains(github.ref_name, '-rc') || contains(github.ref_name, '-RC') || contains(github.ref_name, '-beta') || contains(github.ref_name, '-alpha') }}
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ Work\ Trees/
community-data/
.mcp.json
specs/
.maestro/
maestro-cue.yaml

# Tests
coverage/
Expand Down
49 changes: 49 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Deep technical documentation for Maestro's architecture and design patterns. For
- [Achievement System](#achievement-system)
- [AI Tab System](#ai-tab-system)
- [File Preview Tab System](#file-preview-tab-system)
- [Terminal Tab System](#terminal-tab-system)
- [Execution Queue](#execution-queue)
- [Navigation History](#navigation-history)
- [Group Chat System](#group-chat-system)
Expand Down Expand Up @@ -1116,6 +1117,54 @@ File tabs display a colored badge based on file extension. Colors are theme-awar

---

## Terminal Tab System

Persistent PTY-backed terminal tabs that integrate into the unified tab bar alongside AI and file tabs. Built on xterm.js for full terminal emulation with ANSI support.

### Features

- **Persistent PTY**: Each tab spawns a dedicated PTY via `process:spawnTerminalTab` IPC — the shell stays alive between tab switches
- **xterm.js rendering**: Full terminal emulation via `XTerminal.tsx` (wraps `@xterm/xterm`); raw PTY data passes through unchanged
- **Multi-tab**: Multiple independent shells per agent; tabs are closable and renameable
- **State persistence**: `terminalTabs` array saved with the session; PTYs are re-spawned on restore
- **Spawn failure UX**: `state === 'exited' && pid === 0` shows an error overlay with a Retry button
- **Exit message**: PTY exit writes a yellow ANSI banner and new-terminal hint to the xterm buffer

### Terminal Tab Interface

```typescript
interface TerminalTab {
id: string; // Unique tab ID (UUID)
name: string; // Display name (custom or auto "Terminal N")
shellType: string; // Shell binary (e.g., "zsh", "bash")
cwd: string; // Working directory
pid: number; // PTY process ID (0 = not yet spawned)
state: 'idle' | 'running' | 'exited';
exitCode: number | null;
createdAt: number;
}
```

### Session Fields

```typescript
// In Session interface
terminalTabs: TerminalTab[]; // Array of terminal tabs
activeTerminalTabId: string | null; // Active terminal tab (null if not in terminal mode)
```

### Key Files

| File | Purpose |
| --------------------------- | -------------------------------------------------------------------- |
| `XTerminal.tsx` | xterm.js wrapper; handles PTY data I/O and terminal lifecycle |
| `TerminalView.tsx` | Layout container; manages tab selection and spawn/exit state |
| `terminalTabHelpers.ts` | CRUD helpers (`createTerminalTab`, `addTerminalTab`, `closeTerminalTab`, etc.) |
| `tabStore.ts` | Zustand selectors for terminal tab state |
| `src/main/ipc/handlers/process.ts` | `process:spawnTerminalTab` IPC handler with SSH support |

---

## Execution Queue

Sequential message processing system that prevents race conditions when multiple operations target the same agent.
Expand Down
35 changes: 35 additions & 0 deletions CLAUDE-IPC.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ The `window.maestro` API exposes the following namespaces:
- `history` - Per-agent execution history (see History API below)
- `cli` - CLI activity detection for playbook runs
- `tempfile` - Temporary file management for batch processing
- `cue` - Maestro Cue event-driven automation (see Cue API below)

## Analytics & Visualization

Expand Down Expand Up @@ -74,6 +75,40 @@ window.maestro.history = {

**AI Context Integration**: Use `getFilePath(sessionId)` to get the path to an agent's history file. This file can be passed directly to AI agents as context, giving them visibility into past completed tasks, decisions, and work patterns.

## Cue API

Maestro Cue event-driven automation engine. Gated behind the `maestroCue` Encore Feature flag.

```typescript
window.maestro.cue = {
// Query engine state
getStatus: () => Promise<CueSessionStatus[]>,
getActiveRuns: () => Promise<CueRunResult[]>,
getActivityLog: (limit?) => Promise<CueRunResult[]>,

// Engine controls
enable: () => Promise<void>,
disable: () => Promise<void>,

// Run management
stopRun: (runId) => Promise<boolean>,
stopAll: () => Promise<void>,

// Session config management
refreshSession: (sessionId, projectRoot) => Promise<void>,

// YAML config file operations
readYaml: (projectRoot) => Promise<string | null>,
writeYaml: (projectRoot, content) => Promise<void>,
validateYaml: (content) => Promise<{ valid: boolean; errors: string[] }>,

// Real-time updates
onActivityUpdate: (callback) => () => void, // Returns unsubscribe function
};
```

**Events:** `cue:activityUpdate` is pushed from main process on subscription triggers, run completions, config reloads, and config removals.

## Power Management

- `power` - Sleep prevention: setEnabled, isEnabled, getStatus, addReason, removeReason
Expand Down
13 changes: 11 additions & 2 deletions CLAUDE-PATTERNS.md
Original file line number Diff line number Diff line change
Expand Up @@ -348,16 +348,25 @@ When adding a new Encore Feature, gate **all** access points:
6. **Hamburger menu** — Make the setter optional, conditionally render the menu item in `SessionList.tsx`
7. **Command palette** — Pass `undefined` for the handler in `QuickActionsModal.tsx` (already conditionally renders based on handler existence)

### Reference Implementation: Director's Notes
### Reference Implementations

Director's Notes is the first Encore Feature and serves as the canonical example:
**Director's Notes** — First Encore Feature, canonical example:

- **Flag:** `encoreFeatures.directorNotes` in `EncoreFeatureFlags`
- **App.tsx gating:** Modal render wrapped in `{encoreFeatures.directorNotes && directorNotesOpen && (…)}`, callback passed as `encoreFeatures.directorNotes ? () => setDirectorNotesOpen(true) : undefined`
- **Keyboard shortcut:** `ctx.encoreFeatures?.directorNotes` guard in `useMainKeyboardHandler.ts`
- **Hamburger menu:** `setDirectorNotesOpen` made optional in `SessionList.tsx`, button conditionally rendered with `{setDirectorNotesOpen && (…)}`
- **Command palette:** `onOpenDirectorNotes` already conditionally renders in `QuickActionsModal.tsx` — passing `undefined` from App.tsx is sufficient

**Maestro Cue** — Event-driven automation, second Encore Feature:

- **Flag:** `encoreFeatures.maestroCue` in `EncoreFeatureFlags`
- **App.tsx gating:** Cue modal, hooks (`useCue`, `useCueAutoDiscovery`), and engine lifecycle gated on `encoreFeatures.maestroCue`
- **Keyboard shortcut:** `ctx.encoreFeatures?.maestroCue` guard in `useMainKeyboardHandler.ts`
- **Hamburger menu:** `setMaestroCueOpen` made optional in `SessionList.tsx`
- **Command palette:** `onOpenMaestroCue` conditionally renders in `QuickActionsModal.tsx`
- **Session list:** Cue status indicator (Zap icon) gated on `maestroCueEnabled`

When adding a new Encore Feature, mirror this pattern across all access points.

See [CONTRIBUTING.md → Encore Features](CONTRIBUTING.md#encore-features-feature-gating) for the full contributor guide.
4 changes: 2 additions & 2 deletions CLAUDE-WIZARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ src/renderer/components/Wizard/
3. **Conversation** → AI asks clarifying questions, builds confidence score (0-100)
4. **Phase Review** → View/edit generated Phase 1 document, choose to start tour

When confidence reaches 80+ and agent signals "ready", user proceeds to Phase Review where Auto Run documents are generated and saved to `Auto Run Docs/Initiation/`. The `Initiation/` subfolder keeps wizard-generated documents separate from user-created playbooks.
When confidence reaches 80+ and agent signals "ready", user proceeds to Phase Review where Auto Run documents are generated and saved to `.maestro/playbooks/initiation/`. The `initiation/` subfolder keeps wizard-generated documents separate from user-created playbooks.

### Triggering the Wizard

Expand Down Expand Up @@ -179,7 +179,7 @@ The Inline Wizard creates Auto Run Playbook documents from within an existing ag

- Multiple wizards can run in different tabs simultaneously
- Wizard state is **per-tab** (`AITab.wizardState`), not per-agent
- Documents written to unique subfolder under Auto Run folder (e.g., `Auto Run Docs/Project-Name/`)
- Documents written to unique subfolder under playbooks folder (e.g., `.maestro/playbooks/project-name/`)
- On completion, tab renamed to "Project: {SubfolderName}"
- Final AI message summarizes generated docs and next steps
- Same `agentSessionId` preserved for context continuity
Expand Down
14 changes: 13 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ Use "agent" in user-facing language. Reserve "session" for provider-level conver
- **Command Terminal** - Main window in terminal/shell mode
- **System Log Viewer** - Special view for system logs (`LogViewer.tsx`)

### Automation

- **Cue** — Event-driven automation system (Maestro Cue), gated as an Encore Feature. Watches for file changes, time intervals, agent completions, GitHub PRs/issues, and pending markdown tasks to trigger automated prompts. Configured via `.maestro/cue.yaml` per project.
- **Cue Modal** — Dashboard for managing Cue subscriptions and viewing activity (`CueModal.tsx`)

### Agent States (color-coded)

- **Green** - Ready/idle
Expand Down Expand Up @@ -131,9 +136,10 @@ src/
│ ├── preload.ts # Secure IPC bridge
│ ├── process-manager.ts # Process spawning (PTY + child_process)
│ ├── agent-*.ts # Agent detection, capabilities, session storage
│ ├── cue/ # Maestro Cue event-driven automation engine
│ ├── parsers/ # Per-agent output parsers + error patterns
│ ├── storage/ # Per-agent session storage implementations
│ ├── ipc/handlers/ # IPC handler modules (stats, git, playbooks, etc.)
│ ├── ipc/handlers/ # IPC handler modules (stats, git, playbooks, cue, etc.)
│ └── utils/ # Utilities (execFile, ssh-spawn-wrapper, etc.)
├── renderer/ # React frontend (desktop)
Expand Down Expand Up @@ -203,6 +209,12 @@ src/
| Add Director's Notes feature | `src/renderer/components/DirectorNotes/`, `src/main/ipc/handlers/director-notes.ts` |
| Add Encore Feature | `src/renderer/types/index.ts` (flag), `useSettings.ts` (state), `SettingsModal.tsx` (toggle UI), gate in `App.tsx` + keyboard handler |
| Modify history components | `src/renderer/components/History/` |
| Add Cue event type | `src/main/cue/cue-types.ts`, `src/main/cue/cue-engine.ts` |
| Add Cue template variable | `src/shared/templateVariables.ts`, `src/main/cue/cue-executor.ts` |
| Modify Cue modal | `src/renderer/components/CueModal.tsx` |
| Configure Cue engine | `src/main/cue/cue-engine.ts`, `src/main/ipc/handlers/cue.ts` |
| Add terminal feature | `src/renderer/components/XTerminal.tsx`, `src/renderer/components/TerminalView.tsx` |
| Modify terminal tabs | `src/renderer/utils/terminalTabHelpers.ts`, `src/renderer/stores/tabStore.ts` |

---

Expand Down
31 changes: 31 additions & 0 deletions docs/assets/theme-hint.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/* global window, document, localStorage, URLSearchParams */
/**
* Theme Hint Script for Maestro Docs
*
* When the Maestro app opens a docs URL with a ?theme= query parameter,
* this script sets the Mintlify theme to match.
*
* Supported values: ?theme=dark | ?theme=light
*
* Mintlify stores the user's theme preference in localStorage under the
* key "mintlify-color-scheme". Setting this key and dispatching a storage
* event causes Mintlify to switch themes without a page reload.
*/
(function () {
var params = new URLSearchParams(window.location.search);
var theme = params.get('theme');

if (theme === 'dark' || theme === 'light') {
// Mintlify reads this localStorage key for theme preference
try {
localStorage.setItem('mintlify-color-scheme', theme);
} catch {
// localStorage unavailable — ignore
}

// Apply the class immediately to prevent flash of wrong theme
document.documentElement.classList.remove('light', 'dark');
document.documentElement.classList.add(theme);
document.documentElement.style.colorScheme = theme;
}
})();
2 changes: 1 addition & 1 deletion docs/autorun-playbooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Auto Run supports running multiple documents in sequence:
2. Click **+ Add Docs** to add more documents to the queue
3. Drag to reorder documents as needed
4. Configure options per document:
- **Reset on Completion** - Creates a working copy in `Runs/` subfolder instead of modifying the original. The original document is never touched, and working copies (e.g., `TASK-1735192800000-loop-1.md`) serve as audit logs.
- **Reset on Completion** - Creates a working copy in `runs/` subfolder instead of modifying the original. The original document is never touched, and working copies (e.g., `TASK-1735192800000-loop-1.md`) serve as audit logs.
- **Duplicate** - Add the same document multiple times
5. Enable **Loop Mode** to cycle back to the first document after completing the last
6. Click **Go** to start running documents
Expand Down
96 changes: 96 additions & 0 deletions docs/deep-links.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
title: Deep Links
description: Navigate to specific agents, tabs, and groups using maestro:// URLs from external apps, scripts, and OS notifications.
icon: link
---

# Deep Links

Maestro registers the `maestro://` URL protocol, enabling navigation to specific agents, tabs, and groups from external tools, scripts, shell commands, and OS notification clicks.

## URL Format

```
maestro://[action]/[parameters]
```

### Available Actions

| URL | Action |
| ------------------------------------------- | ------------------------------------------ |
| `maestro://focus` | Bring Maestro window to foreground |
| `maestro://session/{sessionId}` | Navigate to an agent |
| `maestro://session/{sessionId}/tab/{tabId}` | Navigate to a specific tab within an agent |
| `maestro://group/{groupId}` | Expand a group and focus its first agent |

IDs containing special characters (`/`, `?`, `#`, `%`, etc.) are automatically URI-encoded and decoded.

## Usage

### From Terminal

```bash
# macOS
open "maestro://session/abc123"
open "maestro://session/abc123/tab/def456"
open "maestro://group/my-group-id"
open "maestro://focus"

# Linux
xdg-open "maestro://session/abc123"

# Windows
start maestro://session/abc123
```

### OS Notification Clicks

When Maestro is running in the background and an agent completes a task, the OS notification is automatically linked to the originating agent and tab. Clicking the notification brings Maestro to the foreground and navigates directly to that agent's tab.

This works out of the box — no configuration needed. Ensure **OS Notifications** are enabled in Settings.

### Template Variables

Deep link URLs are available as template variables in system prompts, custom AI commands, and Auto Run documents:

| Variable | Description | Example Value |
| --------------------- | ---------------------------------------------- | ------------------------------------- |
| `{{AGENT_DEEP_LINK}}` | Link to the current agent | `maestro://session/abc123` |
| `{{TAB_DEEP_LINK}}` | Link to the current agent + active tab | `maestro://session/abc123/tab/def456` |
| `{{GROUP_DEEP_LINK}}` | Link to the agent's group (empty if ungrouped) | `maestro://group/grp789` |

These variables can be used in:

- **System prompts** — give AI agents awareness of their own deep link for cross-referencing
- **Custom AI commands** — include deep links in generated output
- **Auto Run documents** — reference agents in batch automation workflows
- **Custom notification commands** — include deep links in TTS or logging scripts

### From Scripts and External Tools

Any application can launch Maestro deep links by opening the URL. This enables integrations like:

- CI/CD pipelines that open a specific agent after deployment
- Shell scripts that navigate to a group after batch operations
- Alfred/Raycast workflows for quick agent access
- Bookmarks for frequently-used agents

## Platform Behavior

| Platform | Mechanism |
| ----------------- | ----------------------------------------------------------------------------- |
| **macOS** | `app.on('open-url')` delivers the URL to the running instance |
| **Windows/Linux** | `app.on('second-instance')` delivers the URL via argv to the primary instance |
| **Cold start** | URL is buffered and processed after the window is ready |

Maestro uses a single-instance lock — opening a deep link when Maestro is already running delivers the URL to the existing instance rather than launching a new one.

<Note>
In development mode, protocol registration is skipped by default to avoid overriding the production app's handler. Set `REGISTER_DEEP_LINKS_IN_DEV=1` to enable it during development.
</Note>

## Related

- [Configuration](./configuration) — OS notification settings
- [General Usage](./general-usage) — Core UI and workflow patterns
- [MCP Server](./mcp-server) — Connect AI applications to Maestro
17 changes: 13 additions & 4 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"href": "https://runmaestro.ai"
},
"favicon": "/assets/icon.ico",
"js": "/assets/theme-hint.js",
"colors": {
"primary": "#BD93F9",
"light": "#F8F8F2",
Expand Down Expand Up @@ -52,8 +53,6 @@
"history",
"context-management",
"document-graph",
"usage-dashboard",
"symphony",
"git-worktrees",
"group-chat",
"remote-control",
Expand All @@ -74,15 +73,25 @@
{
"group": "Encore Features",
"icon": "flask",
"pages": ["encore-features", "director-notes"]
"pages": [
"encore-features",
"director-notes",
"usage-dashboard",
"symphony",
"maestro-cue",
"maestro-cue-configuration",
"maestro-cue-events",
"maestro-cue-advanced",
"maestro-cue-examples"
]
},
{
"group": "Providers & CLI",
"pages": ["provider-notes", "multi-claude", "cli"]
},
{
"group": "Integrations",
"pages": ["mcp-server"],
"pages": ["mcp-server", "deep-links"],
"icon": "plug"
},
{
Expand Down
Loading
Loading