User GuidePluginsAPI Reference

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.

Click to scrub
Opening a 3D model file from a terminal and orbiting the interactive mesh viewer

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.

Click to scrub
Clicking a file path printed in the terminal to open it in a preview

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.

Click to scrub
Opening a 3D model and a Mermaid diagram from paths in the terminal

Documents

File typeWhat you see
PDFPaged document with zoom and page navigation; streamed for fast seeking.
Markdown, MDXRendered text with an edit mode, math, callouts, embeds, and tags.
QuartoComputational document rendered like Markdown, with code cells inline.
reStructuredTextRendered to a clean document view.
LaTeXSource rendered with math, sections, and figures.
Word documentsRendered to styled, read-only HTML.
HTMLPage rendered in a safe, sandboxed frame.
Plain text and source codeSyntax-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 typeWhat you see
CSV, TSVSortable, scrollable table with inferred column types; handles very large files.
JSON LinesEach line as a row, with nested objects expandable inline.
ParquetSchema panel plus a scrollable preview; rows loaded on demand.
Arrow, FeatherTable view with the schema header.
Spreadsheets (Excel, ODS)Each sheet as its own tab, with cell types preserved.
SQLite databasesTable 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.

Click to scrub
Editing CSV cells in a table beside a terminal, sorting by a column and editing again, then head showing both edits with correct quoting

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.

Click to scrub
One person suggests a new value for a CSV cell while another inserts a row above it; the suggestion stays on its cell, is accepted, and the file shows both edits

Notebooks and ML logs

File typeWhat you see
Jupyter notebooksRendered notebook with code, text, and stored outputs (images, tables, tracebacks).
Training logsMetrics 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.

Click to scrub
Editing a notebook heading and a code cell in place, undoing the code edit, then switching to the JSON view and back

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.

Click to scrub
Suggesting a new line in a notebook code cell; a collaborator accepts it and jq reads the updated cell from the notebook file

3D scenes and point clouds

File typeWhat you see
3D meshes (STL, OBJ, glTF, FBX, and more)Interactive viewer with orbit, pan, zoom, and material toggles.
USD scenesRendered through the same 3D viewer.
Point cloudsOrbit-able viewer with point-size controls.

ML model files

File typeWhat you see
safetensorsTensor index: name, dtype, shape, and size for every tensor.
GGUFLLM weight metadata: architecture, quantization, and header fields.
ONNXModel graph as nodes and edges with input and output shapes.
PyTorch checkpointsState-dict keys, shapes, and dtypes. Read safely; no code is executed.
HDF5A browsable hierarchy of groups, datasets, shapes, and attributes.

Diagrams, maps, and media

File typeWhat you see
Mermaid, Graphviz, ExcalidrawSource rendered to a live diagram or saved whiteboard.
GeoJSON, KMLFeatures rendered on an interactive map with a property panel.
Images (PNG, JPG, SVG, and more)Rendered at native size; vectors stay sharp.
Video and audioPlayer 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.

Click to scrub
Selecting a sentence in a PDF tile, adding a comment from the selection chip, replying and editing in the margin-rail card, zooming with the highlight anchored, then resolving the thread

PDF comments work like comments on any other file:

  • Reply and resolve threads, and @mention people 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:

  1. A file over 50 MB keeps none, whatever you chose.
  2. What you chose for that file.
  3. What you chose for the nearest folder above it.
  4. Build output keeps none: files under node_modules, target, dist, build, .next, .nuxt, .svelte-kit, __pycache__, .venv, venv, .gradle, .cache or .turbo, and files ending in .o, .a, .so, .dylib, .dll, .exe, .class, .pyc, .pyo, .rlib or .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.
  5. 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.

Next steps

On this page