#Keyboard Shortcuts
JAT uses keyboard shortcuts for fast navigation and common actions. All shortcuts use the Alt key as the primary modifier since its less likely to conflict with browser defaults.
#List navigation (every route)
Every route with a list, table, or card grid supports vim-style j/k navigation. The shortcuts below work on /triage, /chores, /automation, /integrations, /servers, /kanban, /config, /clients, /search, /dash, /memory, /source, /files, /data, /bases, and /workflows.
| Shortcut | Action | Description |
|---|---|---|
j or ↓ |
Next item | Move focus to the next row / card / node |
k or ↑ |
Previous item | Move focus to the previous row / card / node |
Enter |
Open | Open focused item (task detail, file, session, etc.) |
? |
Overlay | Show route-specific shortcut overlay |
Esc |
Clear | Clear focus or close the overlay |
Some routes add route-specific keys (e.g. n for new rule on /automation, Space to toggle start/stop on /servers, →/← to drill into milestones on /clients). Press ? on any page for the full list.
#Global shortcuts
These work from any page in the IDE.
| Shortcut | Action | Description |
|---|---|---|
| Alt+N | Create New Task | Opens TaskCreationDrawer |
| Alt+E | Epic Swarm | Opens Epic Swarm modal for batch agent launch |
| Alt+S | Start Next | Opens dropdown to spawn agent on next ready task |
| Alt+Shift+P | Add Project | Opens project creation drawer |
| Ctrl+` | Toggle Terminal | Opens/closes the terminal output drawer |
| Ctrl+Shift+F | Global Search | Opens file search across all projects |
#Session shortcuts
These target the currently hovered session on the Work page. Hover over a SessionCard first, then press the shortcut.
| Shortcut | Action | Description |
|---|---|---|
| Alt+A | Attach Terminal | Opens a terminal window attached to the session |
| Alt+K | Kill Session | Terminates the tmux session |
| Alt+I | Interrupt | Sends Ctrl+C to the session |
| Alt+P | Pause Session | Pauses the agent's current work |
| Alt+R | Restart | Restarts a stopped session |
| Alt+Shift+C | Copy Contents | Copies session output to clipboard |
The hovered session is tracked through mouse events on SessionCard components. If no session is hovered when you press a session shortcut, nothing happens.
#Files page shortcuts
These are active when the Files page editor is focused.
| Shortcut | Action | Description |
|---|---|---|
| Ctrl+S | Save File | Writes current file to disk |
| Alt+W | Close Tab | Closes the active editor tab |
| Alt+P | Quick Finder | Opens fuzzy file search |
| Ctrl+F | Find in File | Opens Monaco's find dialog |
| Ctrl+H | Find and Replace | Opens Monaco's replace dialog |
#System shortcuts
| Shortcut | Action | Description |
|---|---|---|
| Escape | Close | Closes open drawers, modals, and dropdowns |
| Alt+1 through Alt+9 | Jump to Session | Focuses the Nth visible session card |
#How shortcuts work
The shortcut system uses a Svelte 5 store (keyboardShortcuts.svelte.ts) that manages two maps:
- Global shortcuts for IDE-wide actions with factory defaults
- Command shortcuts for user-assigned slash command bindings
Both maps persist in localStorage. The store initializes on layout mount and registers a global keydown listener.
// Matching a keyboard event to a shortcut
export function matchesShortcut(event: KeyboardEvent, shortcut: string): boolean {
const parsed = parseShortcut(shortcut);
if (parsed.alt !== event.altKey) return false;
if (parsed.ctrl !== event.ctrlKey) return false;
if (parsed.shift !== event.shiftKey) return false;
return event.key.toLowerCase() === parsed.key.toLowerCase();
}The system handles platform differences. On macOS, Alt maps to Option and the display format uses symbols (the option glyph for Alt, the command symbol for Meta). On Linux and Windows, shortcuts display as text labels like Alt+N.
#Customizing shortcuts
Open Settings and navigate to the Shortcuts tab. Every global shortcut shows its current binding with a "Record" button to capture a new key combination.
Requirements for custom shortcuts:
- Must include at least one modifier (Alt, Ctrl, or Meta)
- Must include a main key (letter, number, or special key like Escape)
- Cannot duplicate an existing shortcut
The Settings UI shows conflict warnings in real-time. If you try to assign Alt+K to a new action but it already maps to "Kill Session," you'll see a warning with the conflicting action name.
// Conflict detection
const conflict = findGlobalShortcutConflict('Alt+K', 'my-new-action');
if (conflict) {
console.log(`Conflicts with: ${conflict}`);
}Reset any shortcut to its default with the reset button. "Reset All" restores every shortcut to factory defaults.
#Browser conflict avoidance
The shortcut system deliberately uses Alt as the primary modifier because standard browser shortcuts use Ctrl (Ctrl+C, Ctrl+V, Ctrl+T, etc.). This avoids most conflicts.
Shortcuts that do use Ctrl (like Ctrl+S for save and Ctrl+for terminal) callevent.preventDefault()` to override the browser default. The validation system warns if you try to assign a shortcut that conflicts with a known browser binding.
| Blocked pattern | Browser action | Alternative |
|---|---|---|
| Ctrl+C | Copy | Alt+Shift+C |
| Ctrl+V | Paste | (not overridable) |
| Ctrl+T | New tab | Alt+T |
| Ctrl+W | Close tab | Alt+W (files only) |
#See also
- IDE Overview for page navigation
- Work Sessions for session controls
- File Explorer for editor shortcuts