v0.1 — Now with Google Workspace connector

Tap into enterprise APIs.
Your agent already knows how.

An open-source filesystem that mounts enterprise REST APIs as files. No SDKs, no new abstractions. Agents use ls, cat, grep, and diff — the tools they were trained on.

Get Started View on GitHub
tap — /mnt/tap
$ ls /mnt/tap/google/ drive/ gmail/ calendar/ agent.md $ ls /mnt/tap/google/drive/ Q3 Strategy.md Design Spec.md Budget.md agent.md $ cat "/mnt/tap/google/drive/Q3 Strategy.md" --- id: "1kUm7HSO..." name: "Q3 Strategy" mimeType: "application/vnd.google-apps.document" operations: [read, write, draft, lock] --- Our Q3 priorities focus on three areas... $ echo "Updated revenue target: $52M" >> "/mnt/tap/google/drive/Q3 Strategy.md" # auto-promoted to Google Drive API on close $ cat "/mnt/tap/google/drive/Q3 [email protected]" # read the previous version (auto-snapshot) $ tap log 2026-03-26 08:02:34 [success] google drive/Q3 Strategy auto-promote 847 bytes 2026-03-26 08:02:29 [success] google drive/Q3 Strategy write 42 bytes 2026-03-26 08:02:24 [success] google drive/- list 154 resources
Why tapfs
The filesystem is the universal agent protocol
If Finder can see it, every application can. If every application can, every agent can. Deepest OS integration means widest tool compatibility.
$_

POSIX is the API

No SDKs. No new abstractions. Every LLM was trained on Unix. ls, cat, grep, diff work out of the box.

Sparse hydration

The entire enterprise is mounted. ls returns instantly from cached metadata. Bytes only move on cat — pay-per-access.

Transactional by default

Drafts, locks, versions via path conventions. .draft.md for isolation. @v3.md for snapshots. .lock for concurrency.

Governance is structural

Every operation is audit-logged. Versions auto-snapshot. Rollback with tap rollback [email protected]. Compliance is built in, not bolted on.

Connector ecosystem

Google Workspace ships built-in. Install more from GitHub: tap install tapfs/jira. Or build your own with a YAML spec.

Multi-platform

FUSE on Linux/Docker. File Provider Extension on macOS (Finder integration). Works in E2B sandboxes, Cloudflare Workers, anywhere.

Enterprise APIs become a filesystem

Point tapfs at a backend and it appears as files. Agents explore with ls. Every directory has an agent.md that teaches the agent what's available. Resources render as Markdown with YAML frontmatter.

Writes are safe by default. Direct writes auto-promote on close. Or use the explicit draft workflow for staged changes. Every write is versioned and reversible.

/mnt/tap/ agent.md ← how to use tapfs google/ agent.md ← Google Workspace guide drive/ agent.md ← collection overview Q3 Strategy.md ← live (GET on read) Q3 Strategy.draft.md ← sandboxed edits Q3 [email protected] ← immutable snapshot Q3 Strategy.lock ← concurrency lock gmail/ re-deployment-plan.md calendar/ standup-10am.md
Connectors
Any API becomes a filesystem in YAML
A connector is a YAML file that maps a REST API to filesystem paths. No code required for most APIs — describe your endpoints and tapfs handles auth, caching, rate limiting, and rendering JSON as agent-readable Markdown.

Write YAML, get a filesystem

Define endpoints, describe your collections, and add agent tips. tapfs resolves slugs, paginates, caches, and auto-generates an agent.md that teaches agents how to navigate your API.

14 connectors ship today — GitHub, Jira, Slack, Salesforce, Linear, Notion, Stripe, and more. Install from the registry or drop a YAML file in your connectors directory.

github jira slack salesforce linear notion stripe + 7 more
# connectors/github.yaml name: github description: "GitHub repos, issues, and PRs" base_url: "https://api.github.com" auth: type: bearer token_env: GITHUB_TOKEN capabilities: read: true write: true agent: tips: - "Comments are composed into issue files" - "Grep for Labels to find issues by label" collections: - name: issues description: "Issues with labels and comments" slug_hint: "issue number (e.g. 42)" list_endpoint: "/repos/{owner}/{repo}/issues" get_endpoint: "/repos/{owner}/{repo}/issues/{id}" render: frontmatter: [title, state, "user.login as author"] body: "body"
agent.md
The filesystem teaches itself
Every directory contains an agent.md — a Markdown file that tells the agent what's here, how to navigate it, and what operations are safe. No system prompt engineering. No pre-configuration. The agent learns by reading, the way it reads any file.
# /mnt/tap/github/agent.md # auto-generated from connector spec # github GitHub repositories, issues, pull requests, and notifications ## Collections - repos/ — Git repositories (filenames: repo name) - issues/ — Issues with labels and comments (filenames: issue number) - pulls/ — Open PRs with review status (filenames: PR number) ## Capabilities Supported: read, write, drafts Rate limit: 5000 requests/min ## Tips - Comments are composed into issue files automatically - To find issues by label, grep for the Labels section - Repo filenames use the repository name (e.g. tap.md) ## Relationships - Pull requests reference issues via body text

Auto-generated from your spec

Descriptions, capabilities, tips, and relationships from the connector YAML are rendered into agent.md automatically at mount time. The agent discovers what's available by reading — the way it reads any file.

Connector authors write domain expertise once in the spec. Every agent that mounts the filesystem inherits it. No system prompt engineering. No pre-configuration. And because it's Markdown, it's versionable, diffable, and human-reviewable.

Architecture
Transport-agnostic core
The filesystem logic is platform-agnostic. Each OS gets its deepest native integration. The connector layer is pluggable.
Agent / Application (ls, cat, cp, mv, Finder, any app) FUSE File Provider CLI / API (Linux/Docker) (macOS Finder) (Workers/WASM) ↓ ↓ ↓ ┌──────────────────────────────────────────────┐ │ VirtualFs Core │ │ path parser · cache · drafts · audit │ ├──────────────────────────────────────────────┤ │ Connector Layer │ │ Google REST Jira Salesforce ... │ └──────────────────────────────────────────────┘ ↓ Enterprise APIs REST / GraphQL / gRPC
Community
Build a connector in 15 minutes
One YAML file. No SDK. No code. Describe your API endpoints, add descriptions for agents, and tapfs handles the rest — auth, caching, rate limiting, rendering, and agent.md generation.
1

Describe your endpoints

Map list_endpoint and get_endpoint for each collection. Set id_field and slug_field so tapfs knows how to build filenames from API responses.

2

Add agent context

Write description, slug_hint, and tips in the spec. tapfs auto-generates a rich agent.md that teaches agents how to navigate your API as a filesystem.

3

Mount and test

Run tap mount rest --spec my-api.yaml. Browse with ls, read with cat. Your API is now a filesystem that any agent can use with zero integration.

building a connector
# 1. Write your connector spec $ cat connectors/my-api.yaml name: my-api description: "My internal API" base_url: "https://api.example.com" auth: type: bearer token_env: MY_API_TOKEN collections: - name: items description: "API resources" list_endpoint: "/api/items" get_endpoint: "/api/items/{id}" # 2. Mount it $ tap mount rest --spec connectors/my-api.yaml -m /mnt/tap # 3. It works $ ls /mnt/tap/my-api/items/ widget-a.md widget-b.md widget-c.md agent.md
Positioning
Where tapfs fits
tapfs doesn't compete with MCP or orchestrators. It sits below them — at the OS layer.
tapfs MCP API Gateways LangChain Tools
Abstraction level OS (filesystem) Protocol Network Application
Agent integration Zero (POSIX) SDK required SDK required Framework-locked
Transactional Built-in No No No
Governance Structural Bolt-on Partial None
Discovery ls Tool listing API catalog Code
Offline capable Yes No No No
Get started
Up and running in 60 seconds
# 1. Install
curl -fsSL https://tapfs.dev/install.sh | sh
# 2. Mount your API
export GITHUB_TOKEN="ghp_..."
tap mount github &
# 3. Connect to Claude Code
cd my-project
tap setup claude --append
Then start Claude Code and ask about your data. Claude reads agent.md automatically. Works with any connector: github, jira, slack, salesforce, and 12 more.
# Try the demo (no API key needed)
docker run --rm -it --privileged tapfs/tap
# Mount a real API
docker run --rm -it --privileged \
  -e TAPFS_CONNECTOR=github \
  -e GITHUB_TOKEN="ghp_..." \
  tapfs/tap
# Interactive shell
docker run --rm -it --privileged tapfs/tap shell
Set TAPFS_CONNECTOR to any bundled connector: github, jira, slack, salesforce, stripe, notion, linear, and more.
cargo install tapfs
tap mount github
Requires FUSE: apt install libfuse-dev (Linux) or macFUSE/FUSE-T (macOS). Connector specs are built into the binary.
git clone https://github.com/tapfs/tap.git
cd tap
cargo build --release
./target/release/tap mount github
Build from source for development or to customize connectors.
CLI
Everything from the terminal
tap CLI
$ tap mount google # mount Google Workspace $ tap status # connection health $ tap log # audit trail $ tap versions /mnt/tap/g/drive/file.md # version history $ tap rollback /mnt/tap/g/drive/[email protected] # restore version $ tap install tapfs/jira # install connector from GitHub $ tap connectors # list installed $ tap unmount google # clean unmount