Skip to main content
The Trello VFS exposes workspaces, boards, lists, cards, members, and labels as a virtual filesystem mounted at some prefix such as /trello/. For API key setup, see Trello Setup.

Config

Fields marked secret are redacted in snapshots.

VFS.md

The VFS.md an agent reads with Trello mounted at /<path>.

Virtual Filesystem

/<path> layout

Supported Unix Commands for VFS

Unix commands work on each path as on a local filesystem, as far as the path supports them:

Limitations of Unix Commands for VFS

Where a path differs from a local filesystem:Run man <cmd> or <cmd> --help for one command’s usage.
Example:
Directory and file names embed the Trello ID after __ so that trello CLI commands can take an ID without extra lookups.

Workspaces

Each workspace directory is named:
Inside the workspace directory:
  • workspace.json is the normalized workspace metadata
  • boards/ contains one directory per board

Boards

Each board directory is named:
Inside the board directory:
  • board.json is the normalized board metadata
  • members/ contains one JSON file per board member
  • labels/ contains one JSON file per board label
  • lists/ contains one directory per list

Lists

Each list directory is named:
Each list directory contains:
  • list.json — normalized list metadata with fields such as list_id, list_name, board_id, closed, pos
  • cards/ contains one directory per card

Cards

Each card directory is named:
Each card directory contains:
  • card.json — normalized card metadata with command-aligned fields such as card_id, board_id, list_id, member_ids, label_ids, due, url
  • comments.jsonl — normalized comment stream ordered by created_at
comments.jsonl is a Mirage representation chosen for shell-friendly workflows. It is not a native Trello file format.

Members

Each member file is named:
Member JSON includes command-aligned identifiers such as member_id and username so the value can be reused directly in commands like trello card assign.

Labels

Each label file is named:
Label JSON includes label_id, label_name, color, and board_id.

Integration

What Trello answers through its own API, so fewer files are read. Integration explains each command. grep -rw and rg -w ask Trello search for each word and read only the cards that hold every word, where the search names it or the listing keeps it. The listing keeps the card’s other fields (ids, due date, flags, link) and each name or description word the search can miss, such as one inside a link; the cards are listed once more for this, so a change since the last listing is still found. Comments and the board’s other files are always read. Every card is read when the word is a key of the card JSON (desc, due) or a JSON literal, has a digit or only the letters a to f, which an id can hold, and when a search fails, returns 1,000 cards or finds nothing. walk_limit: -1 in the mount’s "@all" command limit reads every file instead, since Trello indexes a write some time after it lands.

Cache

Uses IndexCacheStore (same as other mounts).

Example

See examples/python/vfs/trello/trello.py for the full working example.

Finding IDs

IDs are embedded in directory and file names after __:

Shell Commands

Standard commands available on the mounted Trello tree:

Acting on Trello

Reads and writes on Trello entities by ID (boards, members, lists, labels, cards, comments) go through the trello CLI when installed; the mounted tree serves the same entities as normalized JSON files. The CLI takes workspace_id and board_ids in its own config, so it covers the boards the mount lists only when both are configured alike.