Quickstart
Install
Section titled “Install”omnifs ships as an npm package. Node 18 or later is required.
npm install -g @0xff-ai/omnifsVerify the install:
omnifs --versionPick a mount point, then start the runtime:
mkdir -p /tmp/omniomnifs mount /tmp/omniThe process stays in the foreground and logs provider activity to stderr. Open a second terminal for the reads below. To unmount, press Ctrl-C or run umount /tmp/omni.
Providers read credentials from environment variables. Export any you need before mounting, or set them in a config file (see CLI reference):
export GITHUB_TOKEN=ghp_...export LINEAR_TOKEN=lin_api_...omnifs mount /tmp/omniFirst reads
Section titled “First reads”GitHub issues
Section titled “GitHub issues”List open issues on a repo:
ls /tmp/omni/github/0xff-ai/omnifs/_issues/_open1 2 5 12 23 2853Read the title of one:
cat /tmp/omni/github/0xff-ai/omnifs/_issues/_open/2853/titleAuth tokens expire mid-sessionRead the body or check the state:
cat /tmp/omni/github/0xff-ai/omnifs/_issues/_open/2853/statecat /tmp/omni/github/0xff-ai/omnifs/_issues/_open/2853/bodyPull a PR diff:
cat /tmp/omni/github/0xff-ai/omnifs/_prs/_open/41/diffDNS records
Section titled “DNS records”No credentials needed. The dns provider uses DNS-over-HTTPS with Cloudflare and Google preconfigured:
ls /tmp/omni/dns/example.comA AAAA MX NS TXT CNAME SOA _all _rawcat /tmp/omni/dns/example.com/MX10 mail.example.com.20 mail2.example.com.Query via a specific resolver:
cat /tmp/omni/dns/@1.1.1.1/example.com/ADocker container state
Section titled “Docker container state”The docker provider reads the local daemon socket, no credentials required:
ls /tmp/omni/docker/containers/_runningnginx postgres rediscat /tmp/omni/docker/containers/by-name/postgres/staterunningWhat just happened
Section titled “What just happened”Each cat or ls above issued a read() or readdir() to the kernel, which FUSE routed to the omnifs host runtime. The runtime resolved the path, checked its event-invalidated cache, and dispatched the request to the relevant WASM provider component (github, dns, or docker). The provider answered one of three operations (lookup-child, list-children, or read-file) and the host made a single capability-gated callout on its behalf. The provider never holds credentials and never opens its own socket; the host does both.
On a cache hit, the bytes return without leaving your machine.
Compose providers
Section titled “Compose providers”The mount point is a single filesystem. grep, diff, jq, and find reach across providers naturally:
# open GitHub issues from one repo, compared against Linear issues for a teamdiff \ <(ls /tmp/omni/github/0xff-ai/omnifs/_issues/_open) \ <(ls /tmp/omni/linear/teams/ENG/issues/_open)# watch a CI run status while it runswatch -n5 cat /tmp/omni/github/0xff-ai/omnifs/_actions/runs/12345678/status# pull arXiv paper metadata with jqcat /tmp/omni/arxiv/papers/1706.03762/metadata.json | jq .title"Attention Is All You Need"Five live providers
Section titled “Five live providers”| Provider | What it exposes | Credentials |
|---|---|---|
github | repos, issues, PRs, CI runs | GITHUB_TOKEN |
docker | container state, compose projects | none (local socket) |
arxiv | papers, metadata, source archives | none |
linear | issues, state, priority | LINEAR_TOKEN |
dns | A, AAAA, MX, TXT, and other record types | none |
Thirteen more providers are in progress. They appear in the catalogue with // wip and are not mounted by default.
Next steps
Section titled “Next steps”- The projection model: how paths map to WASM provider ops and what the runtime owns.
- Provider catalogue: path schemes for all five live providers plus the in-progress list.
- Build a provider: implement
lookup-child,list-children, andread-fileas a WASM component and load it without rebuilding the runtime.