File previews
Click a path in your terminal and taiku opens it in the right viewer for PDFs, data tables, 3D meshes, notebooks, and more.
When a command prints a file path, you can open it in a viewer matched to that file type instead of treating it as a download.
Open a file from the terminal
Paths in terminal output become clickable. Click one (or double-tap on a touch screen) and taiku opens the file in a viewer chosen for its type: a table for a CSV, a 3D viewer for a mesh, a paged reader for a PDF.
You have a few ways to open a file:
- Click a path in any terminal (or double-tap on a touch screen) to open it in the overlay viewer.
- Click a file in the sidebar to open it the same way.
- Promote a file into a tile so it stays visible while you work. Text and code files offer an Edit action; PDFs offer View in tile. Rich previews (tables, 3D models, notebooks) keep their interactive viewer in the tile.
- Step through siblings using the chevron strip in the viewer header to move between files of the same type in that folder.
Supported preview types
taiku previews dozens of file types inline. Here is what each viewer shows.
Documents
| File type | What you see |
|---|---|
| Paged document with zoom and page navigation; streamed for fast seeking. | |
| Markdown, MDX | Rendered text with an edit mode, math, callouts, embeds, and tags. |
| Quarto | Computational document rendered like Markdown, with code cells inline. |
| reStructuredText | Rendered to a clean document view. |
| LaTeX | Source rendered with math, sections, and figures. |
| Word documents | Rendered to styled, read-only HTML. |
| HTML | Page rendered in a safe, sandboxed frame. |
| Plain text and source code | Syntax-highlighted text with line numbers and find-in-file. |
| Config files (JSON, YAML, TOML, XML, and more) | Syntax-highlighted and pretty-printed where it helps. |
Tables and data
| File type | What you see |
|---|---|
| CSV, TSV | Sortable, scrollable table with inferred column types; handles very large files. |
| JSON Lines | Each line as a row, with nested objects expandable inline. |
| Parquet | Schema panel plus a scrollable preview; rows loaded on demand. |
| Arrow, Feather | Table view with the schema header. |
| Spreadsheets (Excel, ODS) | Each sheet as its own tab, with cell types preserved. |
| SQLite databases | Table list with row counts; click a table to browse its rows, read-only. |
Click a cell of a CSV to edit it where it sits. A value with a comma is quoted in the file for you, and an edit made while the table is sorted lands on the row you see.
In suggesting mode a changed cell shows its old and new value with a card beside the row, and it stays on its cell when someone adds a row above it.
Notebooks and ML logs
| File type | What you see |
|---|---|
| Jupyter notebooks | Rendered notebook with code, text, and stored outputs (images, tables, tracebacks). |
| Training logs | Metrics rendered as a table with optional plots over training steps. |
Click any cell of a notebook to edit it in place. Changes save as you type, undo
(Cmd+Z or Ctrl+Z) steps back one edit, and the view menu switches between
the rendered notebook and its JSON.
In suggesting mode a new line in a code cell shows as a suggestion with its card in the margin. When a collaborator accepts it, the line is saved into the notebook file.
3D scenes and point clouds
| File type | What you see |
|---|---|
| 3D meshes (STL, OBJ, glTF, FBX, and more) | Interactive viewer with orbit, pan, zoom, and material toggles. |
| USD scenes | Rendered through the same 3D viewer. |
| Point clouds | Orbit-able viewer with point-size controls. |
ML model files
| File type | What you see |
|---|---|
| safetensors | Tensor index: name, dtype, shape, and size for every tensor. |
| GGUF | LLM weight metadata: architecture, quantization, and header fields. |
| ONNX | Model graph as nodes and edges with input and output shapes. |
| PyTorch checkpoints | State-dict keys, shapes, and dtypes. Read safely; no code is executed. |
| HDF5 | A browsable hierarchy of groups, datasets, shapes, and attributes. |
Diagrams, maps, and media
| File type | What you see |
|---|---|
| Mermaid, Graphviz, Excalidraw | Source rendered to a live diagram or saved whiteboard. |
| GeoJSON, KML | Features rendered on an interactive map with a property panel. |
| Images (PNG, JPG, SVG, and more) | Rendered at native size; vectors stay sharp. |
| Video and audio | Player with scrubbing; streamed for fast seeking. |
Archives and anything else
Zip and tar archives show a contents listing so you can inspect what is inside before extracting. Unknown file types fall back to a clean download link instead of dumping raw bytes into the view. Plain-text files with no special extension still open in the syntax-highlighted text viewer.
Comment on PDFs
Open a PDF in a tile and you can discuss it in place. Select a passage of text on the page and add a comment. On desktop a small chip appears beside the selection, and on mobile you tap the selection to get the same affordance. The passage gets a highlight, and the comment appears as a card in the margin rail next to the page.
PDF comments work like comments on any other file:
- Reply and resolve threads, and
@mentionpeople in the session to pull them into the discussion. - Edit or delete your own comments. Writers in the session can also remove a comment when tidying up.
- Comments persist. Close the PDF and reopen it later and your highlights and threads come back. If the file changed in between, each comment re-anchors to its matching passage.
- Large PDFs included. The document streams in as usual, and comments load along with the pages.
Because a PDF is read-only media, a PDF tile offers the commenting and viewing modes only; there is no edit or suggest mode for the file itself.
Agents and scripts can comment on a PDF from the CLI by quoting the passage to anchor to:
taiku func comment --file report.pdf --match "net revenue" --body "Is this net of returns?"Anchoring on a PDF is always by matched text. Line numbers don't apply, and edit suggestions are refused.
Large artifacts
Big files stream into their viewer instead of loading all at once, so a multi-gigabyte PDF, video, or Parquet file opens quickly and seeks smoothly. Tables with millions of rows scroll without freezing because rows render only as you reach them, and Parquet row groups load on demand. You get a responsive preview without waiting for the whole file to download.
Search inside a preview
Press Cmd+F (macOS) or Ctrl+F (Windows / Linux) inside a viewer to open the
find overlay. Type to highlight matches and step through them with Enter /
Shift+Enter. Press the same shortcut again, or Esc, to close.
Search works anywhere the content is text: the text, Markdown, notebook, table, log, and document viewers.
Versions of a file
When a file is saved through taiku (an editor tile, an upload, a plugin), the
bytes it replaces are kept first as a version. Versions are kept in taiku's own
data folder on the machine hosting the session, never in your workspace:
~/.local/share/taiku/versions on Linux,
~/Library/Application Support/taiku/versions on macOS, and
%LOCALAPPDATA%\taiku\versions on Windows. On macOS and Linux, no sandboxed
shell in a session is given that folder. If the data folder is set (with
TAIKU_DATA_DIR) to somewhere those shells can read, such as the workspace or
/tmp, taiku keeps no versions at all. Shells on Windows aren't sandboxed, so a
shell in a session there can read that folder as it can any of your files.
Your repository's own .git is never touched either, so a version never shows
up in your branches or gets pushed. A store from an earlier taiku, at
.taiku/history.git in the workspace, is moved to the data folder the first
time taiku uses it, and removed from the workspace once everything in it has
arrived. One that can't be moved whole stays where it was.
A file keeps its newest 100 versions, plus up to 20 you name, which are kept for good. To name another once a file has 20, clear one of the names first.
When Claude Code edits or writes a file in a folder taiku is hosting, the file as it was before that edit is kept too, marked with the agent, its session and the tool call that replaced it, as the agent's own session record tells it. The copy comes from the tool's own record of the file, not from reading the file later, so nothing someone else wrote in between is kept under the agent's name. Claude Code's record gives every line ending as a plain newline, so taiku looks at the file only to learn which endings it had: an edit leaves them as they were. When the file can't tell, the version is still kept, with the text as Claude Code recorded it, and the history marks its line endings as unconfirmed. That happens when Claude Code rewrites a whole existing file, when the file has changed since, has a byte-order mark or no line break left, and when it is gone. It works the same in a hosted folder that isn't a git repository. A run of edits by one agent session, each starting where the last one left off, is one version, as a run of saves is. Edits taiku can't copy whole keep no version: Codex patches, a file holding what looks like a credential, or an edit taiku hears about more than 10 minutes late.
Changes made outside taiku are kept too. While taiku hosts a folder it watches
the files in it, and when one changes (in your editor, by a script, by a
formatter) it keeps the file as it settled, at most once every 5 minutes per
file; inside those 5 minutes, the file's last state is the one kept. Opening a
file in a preview or attaching it in a chat keeps it as it was then, so a file
you have looked at has something to go back to even if it then changes outside
taiku. When the oldest version was only seen after a change, the history says
that the version before it wasn't kept. Folders the ignore rules leave out, such
as node_modules and .git, aren't watched, and a folder with more than 8,192
folders to watch isn't watched at all; its history says so.
Whether a file keeps versions is decided in this order:
- A file over 50 MB keeps none, whatever you chose.
- What you chose for that file.
- What you chose for the nearest folder above it.
- Build output keeps none: files under
node_modules,target,dist,build,.next,.nuxt,.svelte-kit,__pycache__,.venv,venv,.gradle,.cacheor.turbo, and files ending in.o,.a,.so,.dylib,.dll,.exe,.class,.pyc,.pyo,.rlibor.rmeta. A build makes them again, so their old copies are rarely worth the space. To keep versions of one anyway, choose it for that file or its folder. - Everything else keeps versions.
Plugins and tools read a file's versions and this setting, and change it,
through the plugin API:
file/history, file/version, file/version/name and file/keep.