Mount any PostgreSQL database as a directory and explore it with ls, cat, and grep. Tables are folders, rows are files, columns are fields: the interface your agents already know, mapped onto your data. Compose filters, ordering, and pagination into one path, and the whole query pushes down to a single SQL statement, so even huge tables stay fast. Same engine as file-first, with a SQL escape hatch when you want it.
Mounting a database turns every table into a directory and every row into a file. List with ls, read with cat, search with grep. Before you touch a table, inspect its columns and size through .info/. No SQL, no client, no schema to memorize.
Every path is just a query. Reading one row runs one small query; for big tables, you push the work down into the database with pipeline paths, which is next.
Chain filters, ordering, and pagination into a single path. The database executes it as one optimized query. Only matching rows ever cross the wire.
The last 10 orders for customer 123, newest first, as JSON, is a directory path:
Segments compose in any order:
.by/col/val: index lookup.filter/col/val: filter on any column.order/col: sort.columns/a,b: project specific columns.first/N, .last/N, .sample/N: pagination and sampling.export/json|csv|tsv: output formatNo SQL client, no schema in your head, no N+1 filesystem calls. Just one path, one query.
Update a customer's email, toggle a feature flag, delete a test record. One shell command does it, with no SQL client and no carefully crafted WHERE clause.
Standard Unix tools work on every table. For larger questions, push the filtering into the database and let awk finish the job.
You don't write paths by hand. The agent reads the schema as files, builds the pipeline path, and asks before it writes. A few exchanges:
/mnt/orders/.info/columns, .info/count, and a sample of 5 rows…
customer_id, status, created_at.
id (uuid PK), customer_id, status (pending/shipped/delivered/cancelled), total, created_at / shipped_at, payment_method, currency.
Under the hood: the metadata dot-directories expose the database's own catalog as files: .info/columns, .info/count, .info/schema, index lists, and a .sample/. Reading those lets the agent reason about a table before it touches anything, instead of blindly ls/cat-ing millions of rows.
The skills teach the rules: check .info/count first, sample before scanning, and look up by an index when you can.
cat /mnt/orders/.filter/status/shipped/.order/total/.last/10/.export/json
8842 at $1,240.
Under the hood: TigerFS's dot-directories compose like a pipeline: .filter/status/shipped, .order/total, and .last/10 chain into one path that runs as a single SQL query, so only ten rows cross the wire.
You could cat the rows and grep/sort them yourself, but composing the query pushes the work into the database, which is what keeps it fast on large tables.
[email protected] and bump her tier to premium/mnt/customers/.by/email/[email protected]…
4172 (Alice Chen), signed up 2025-11-04, current tier: standard.
premium to /mnt/customers/4172/tier. Other fields untouched (PATCH-style).
Under the hood: it resolves the row by an indexed lookup (cat .by/email/[email protected]), then writes one field (echo 'premium' > customers/4172/tier), a PATCH that leaves every other column untouched.
It confirms first, because data-first writes are permanent.
Note: data-first writes are direct and permanent. For reversible writes, use a file-first workspace with history enabled.
Read a row in whatever format fits the task — .json for jq, .yaml for hand-editing, .csv for spreadsheets — or navigate into a row to treat its columns as individual files.
File-first workspaces have backing tables too. Reach them data-first under /mnt/.tables/<workspace>/ for column-level queries, but note that writes through .tables/ bypass the history trigger, so they don't appear in .log/ or undo. Use them for diagnostics, not day-to-day edits.
The usual ways into a database make agents pay a tax on every task: a client, a schema to remember, libraries to pass around, or an export step before any tool can touch the data.
| Capability | TigerFS | SQL client | ORM | CSV export |
|---|---|---|---|---|
| No SQL to write | ✓ | ✗ | ~ | ✓ |
| Works with Unix tools (grep/cat/awk) | ✓ | ✗ | ✗ | ✓ |
| No client libs / schema memorization | ✓ | ✗ | ✗ | ✓ |
| Query pushdown to the database | ✓ | ✓ | ✓ | ✗ |
| Live data, no export step | ✓ | ✓ | ✓ | ✗ |
| PATCH updates (touch only changed fields) | ✓ | ~ | ✓ | ✗ |
| Look up by any indexed column | ✓ | ✓ | ✓ | ✗ |
TigerFS is the only one of these that's both as easy as files and pushes real queries into the database.
Install in under 60 seconds and mount any PostgreSQL as a filesystem.