parlofs
v0.2.30
Published
Parlo — universal filesystem for humans and AI agents. CLI + SDK in one package.
Maintainers
Readme
parlofs
Parlo is a universal filesystem and remote-command surface for humans, scripts, and AI agents.
- Mount cloud drives and API connections as folders under
~/parlo/ - Browse GitHub repos under
~/parlo/git/<owner>/<repo>/ - Run heavy repo search with remote ripgrep in Parlo containers
The npm package is parlofs; the installed command is parlo.
Install
npm install -g parlofs
parlo setup
parlo mountThe optional rg passthrough wrapper is not installed automatically by npm. Install it explicitly if you want plain rg ... ~/parlo/git/* to route to remote Parlo ripgrep:
parlo install-rg-wrapper
# or: parlo setup --install-rg-wrapperThat creates ~/.parlo/bin/rg and adds ~/.parlo/bin to your shell PATH. The wrapper only intercepts rg calls that target Parlo git paths like ~/parlo/git/*; all normal local rg calls delegate to your real ripgrep binary.
If your shell has not picked up the wrapper yet:
export PATH="$HOME/.parlo/bin:$PATH"Sign up
parlo init # humans: browser-based
parlo agent-signup # agents: proof-of-work, no browser, no emailAgent one-liner:
curl -fsSL https://parlo.run/agent | sh -s -- --yesMount
parlo mount
ls ~/parlo/Mount strategy auto-detects:
| Platform | Strategy | |---|---| | macOS 26+ | FSKit | | macOS + FUSE-T | FUSE-T | | Linux + FUSE | native FUSE | | CI/sandbox | direct ops / folder mode |
API connections as folders
parlo connect github
parlo connect linear
parlo connect stripeThat opens your browser to authorize. Once done, the API appears as files:
ls ~/parlo/github/
cat ~/parlo/linear/ENG-123.md
vim ~/parlo/github/issues/42.mdParlo generates filesystem adapters. ls, cat, editor saves, and rm map to API operations.
Remote GitHub repo search
Use parlo rg to run real ripgrep inside Parlo's Cloudflare Container, next to the cached repo checkout:
parlo rg malloc -t cpp https://github.com/v8/v8
parlo rg malloc -t cpp v8/v8
parlo rg VACUUM postgres/postgres --path src/backend/commandsWith the optional wrapper installed, this local-looking syntax is routed remotely too:
rg malloc -t cpp ~/parlo/git/v8/v8Only Parlo git paths are intercepted. Local usage remains local:
rg TODO ./src # local rg
rg malloc ~/parlo/git/v8/v8 # remote parlo rgForce local rg for Parlo paths:
PARLO_RG_LOCAL=1 rg malloc -t cpp ~/parlo/git/v8/v8Friendly formatted search:
parlo grep "VACUUM" postgres/postgres --path src/backend/commandsBrowse repos as files
ls ~/parlo/git/v8/v8/src
cat ~/parlo/git/postgres/postgres/README.mdUse the mount for browsing and reading. Use parlo rg / wrapped rg for recursive search so the work runs remotely instead of over FUSE.
CI and headless automation
For containers and scripts, pass tokens directly:
parlo connect stripe --headless --token "$STRIPE_SECRET_KEY"
parlo connect github --headless --token "$GH_PAT"Direct ops without mounting:
parlo ls github/issues/
parlo cat linear/ENG-123.md
parlo write linear/ENG-123.md --from - <<< "new content"
parlo rg TODO owner/repoSDK
import { ParloDrive, ApiProvider } from 'parlofs'
const drive = new ParloDrive({
provider: new ApiProvider({ apiBase, driveId, sessionToken }),
})
await drive.init()
const entries = await drive.list('/')Links
- Web app/docs: https://parlo.run
- Source: https://github.com/rdvo/parlo
License
MIT
