← Blog

Read, diff, and edit without leaving the terminal

AI agents reference files constantly. Instead of alt-tabbing to an editor every time, we built markdown, code, and diff viewers right into the terminal workspace.

The problem

Working with AI coding agents means constantly looking at files. The agent changes a file and you want to see the diff. It references a markdown doc and you want to read it. It edits code and you want to check what it wrote. Every time, you alt-tab to VS Code or a browser, find the file, look at it, switch back.

This context switching kills your flow. You're not just losing seconds — you're losing the mental thread of what the agent is doing. By the time you've checked the file and come back, you've lost track of where the conversation was heading.

Markdown viewer with file browser

When an agent outputs a file path ending in .md or .mdx, clicking it opens the file in a rendered markdown tab — right next to your terminal. Full rendering with headers, code blocks, lists, links, inline code. The tab gets a green tint so you can distinguish it from terminal tabs at a glance.

The right panel shows a markdown file browser with all markdown files in your repo, organized by directory. A filter field supports wildcards. Status dots indicate which files are modified, staged, or new — so you can see what the agent changed without running git status. Click any file to open it, click Edit to switch to the code editor for that file.

TUICommander markdown viewer showing CHANGELOG.md rendered with a file browser panel listing 1309 markdown files
The CHANGELOG rendered as a markdown tab, with the file browser showing all 1309 markdown files in the repo. Status dots mark modified and new files. Click any file to open it.

Code editor with project tree

For code files, TUICommander opens a syntax-highlighted editor tab powered by CodeMirror. Line numbers, proper indentation, language-aware highlighting. The right panel becomes a full file browser — the entire project tree with folders, search, and the same modification status dots.

This isn't meant to replace your IDE for heavy editing. It's for the quick checks and small fixes that happen constantly during agent work: verifying what the agent wrote, making a one-line correction, checking a configuration file. The tab is blue-tinted so you can tell it apart from terminals and markdown viewers.

TUICommander code editor showing a JavaScript service worker file with syntax highlighting and a full project file tree
A service worker file open in the code editor with the project tree on the right. 51 files with modification status visible. The blue tab tint distinguishes editor tabs from terminal sessions.

File browser with tree view

The file browser panel now supports two view modes: flat list and tree. The flat list works like before — navigate directories, breadcrumb path, click to open. The tree view shows a collapsible hierarchy with lazy-loaded subdirectories. Click a folder chevron to expand it — children are fetched on demand, so even large repos stay responsive. File sizes, git status dots, and context menus work the same in both modes.

Toggle between list and tree with the toolbar buttons at the top right. When you're searching (typing in the search bar), the view automatically switches to flat results regardless of your mode preference — tree view returns when you clear the search.

TUICommander file browser in tree view mode showing a collapsible directory hierarchy with .claude folder expanded, nested journal/entries subfolder, and file sizes
The file browser in tree view — folders expand lazily on click. The .claude directory shows nested journal entries with file sizes. Toggle between list and tree views with the toolbar buttons.

Side-by-side diff viewer

The diff viewer is where you spend the most time during agent work. Click any changed file in the Git Changes panel and it opens in a split diff tab — old version on the left, new on the right, with word-level highlighting showing exactly what changed. You can toggle between split and unified view.

But viewing diffs is only half the story. You can act on them: click individual lines to select them, shift-click for ranges, and use the floating action bar to restore specific hunks or lines. This is surgical undo — if the agent changed 50 lines but got 3 wrong, you revert just those 3 without touching the rest. The tab is red-tinted, the Git Panel on the right shows the full change list with per-file addition/deletion counts, and the Smart Commit button is right there for when you're ready to commit.

TUICommander side-by-side diff viewer showing a version bump in plugin.json, with the Git Changes panel listing 11 modified files
A side-by-side diff of plugin.json showing a version bump from 4.7.0 to 5.0.0. The Git Panel lists 11 unstaged changes with per-file stats. Smart Commit is one click away.

All-files diff scroll view

When an agent makes changes across multiple files, clicking through them one by one is tedious. The Diff Scroll view shows every changed file in a single continuous scroll — staged and unstaged changes combined. Each file section is collapsible, with addition/deletion counts and a clickable filename that opens the file in the editor. A sticky header tracks the total: files changed, lines added, lines removed.

You can toggle between split (side-by-side), unified (inline), and scroll (all files) modes from the toolbar. The scroll view reloads reactively on every git operation — stage a file and the view updates immediately. Click any filename to jump to the editor for a quick fix, then come back to review the rest.

TUICommander Diff Scroll view showing all changed files in a continuous scrollable list with collapsible sections, addition/deletion counts, and mode toggle buttons
The Diff Scroll view shows 2 changed files with +30/-1 in a single scrollable page. Each file section is collapsible, the sticky header shows totals, and the toolbar toggles between split, unified, and scroll modes.

Find files and content from the command palette

The command palette (Cmd+P) now doubles as a file finder. Type ! to search files by name — results appear instantly as you type, showing the full path. Type ? to search inside file contents — matches show the file path, line number, and the matched text with highlighting. Press Enter to open the file in the editor (content matches jump to the exact line).

This means you never need to leave the keyboard to find a file. The palette transitions seamlessly between command mode (actions and shortcuts), filename mode, and content search — just change the prefix character.

TUICommander command palette in content search mode showing matches for 'readme' across Go test files, markdown docs, and Python setup files with highlighted match text
Content search in the command palette — type ?readme to find every mention across the codebase. Matches show file path, line number, and highlighted text. The footer hints remind you that ! switches to filename search.

Everything is a tab

The key design decision was making viewers first-class tabs, not modal popups or side panels. A markdown file, a code editor, a diff view — they sit in the tab bar alongside your terminal sessions. You switch between them with Cmd+1 through Cmd+9, the same way you switch between terminals. Each tab type has its own color accent (green for markdown, blue for editor, red for diff, purple for panels, amber for remote sessions) so the tab bar becomes a visual map of your workspace.

This means you can have an agent running in tab 1, the diff it's producing in tab 2, and the markdown spec it's working from in tab 3. All visible, all one keyboard shortcut away, no app switching.

Clickable file paths tie it together

The viewers aren't just for manually opening files. TUICommander auto-detects file paths in terminal output — when an agent prints a path, it becomes a clickable link. Markdown files open in the viewer, code files open in the editor (or your configured IDE), diffs open in the diff tab. The agent's output becomes a navigation surface. It says "I modified src/hooks/useSmartPrompts.ts:52" and you click to see exactly what it did.