Start
Quickstart
Install Parlo, sign in, mount your filesystem, and use cloud drives and APIs as normal files.
This guide walks through a real use case: investigate a billing bug by reading GitHub issues, Linear tickets, and a Stripe customer record, then save a short report to a cloud drive.
The folder names below are examples. Your folders depend on what you connect and what you name each connection.
1. Install and sign in
1curl -fsSL https://parlo.run/install | sh2parlo setupOr install from npm:
1npm install -g parlofs2parlo setupThe package is parlofs. The command is parlo.
parlo setup opens a browser/device-code sign-in flow. For public beta, signup requires Turnstile and email verification.
2. Connect something
You can connect APIs and cloud drives from the web app or CLI. For example:
1parlo connect github2parlo connect linear --headless --token "$LINEAR_API_KEY"3parlo connect stripe --headless --token "$STRIPE_SECRET_KEY"If an API needs browser OAuth, let the human complete it. If you already have a provider token, headless setup is fine.
After connecting, check what Parlo knows about:
1parlo connectionsExample output:
1API Connections:2 ● GitHub (github) -> ~/parlo/github3 ● Linear (linear) -> ~/parlo/linear4 ● Stripe (stripe) -> ~/parlo/stripe5Drives:6 ● Main (main) -> ~/parlo/main3. Mount the filesystem
1parlo mount2cd ~/parlo3lsExample output:
1github linear main stripeEach connected service is now a folder. Start by reading the service README so you know the layout.
1cat linear/README.mdExample output:
1# Linear2 3This mount exposes Linear issues and projects as markdown files.4 5Useful paths:6- issues/ issue files7- projects/ project files8- teams/ team metadata9 10Examples:11 ls issues/12 cat issues/ENG-123.md13 grep -R "billing" issues/4. Investigate a real task
Suppose your task is to find billing-related bugs, read the relevant issue, check the matching customer record, and write a short report.
Search GitHub issues without loading the whole issue list into context:
1grep -R "billing\|invoice\|subscription" github/issues | head -20Example output:
1github/issues/42.md:title: Billing page shows stale invoice status2github/issues/42.md:body: Customer says subscription is active in Stripe but shown as past_due in app.3github/issues/77.md:title: Invoice download fails for annual plansRead only the relevant issue:
1cat github/issues/42.mdExample output:
1---2id: 423state: open4labels: [bug, billing]5author: customer-success6---7 8# Billing page shows stale invoice status9 10Customer says subscription is active in Stripe but shown as past_due in app.Now look for the matching Linear ticket:
1grep -R "stale invoice\|past_due\|billing page" linear/issuesExample output:
1linear/issues/ENG-123.md:title: Fix stale billing status on account page2linear/issues/ENG-123.md:labels: billing, bugRead the Linear ticket:
1cat linear/issues/ENG-123.mdExample output:
1---2id: ENG-1233status: In Progress4assignee: rob5labels: [billing, bug]6---7 8# Fix stale billing status on account page9 10Likely cache invalidation issue after Stripe webhook succeeds.Check the customer record exposed by the Stripe connector:
1cat stripe/customers/cus_8x92.mdExample output:
1---2id: cus_8x923subscription_status: active4latest_invoice_status: paid5---6 7# Customer cus_8x928 9Stripe shows the subscription is active, but the app shows past_due.5. Save a report to a cloud drive
Write a short report locally:
1cat > /tmp/billing-report.md <<'EOF'2# Billing bug report3 4## Summary5GitHub issue 42 and Linear issue ENG-123 appear to describe the same bug.6 7## Evidence8- github/issues/42.md: customer sees active subscription shown as past_due9- linear/issues/ENG-123.md: stale billing status after Stripe webhook succeeds10- stripe/customers/cus_8x92.md: Stripe says subscription is active11 12## Next step13Check webhook handling and cache invalidation for subscription status updates.14EOFCopy it into a Parlo cloud drive:
1mkdir -p main/reports2cp /tmp/billing-report.md main/reports/billing-report.mdVerify it is there:
1cat main/reports/billing-report.mdExample output:
1# Billing bug report2 3## Summary4GitHub issue 42 and Linear issue ENG-123 appear to describe the same bug.That file is now stored through Parlo's cloud-backed drive, but it was created with normal shell commands.
6. What writes mean
Parlo maps file operations back to the underlying system.
Examples:
1# Cloud drive upload2cp ./report.pdf main/reports/report.pdf3 4# API update, if the mount supports writes5vim linear/issues/ENG-123.md6 7# API delete or cloud file delete, if supported8rm main/reports/old-report.mdA connection's README.md tells you which paths are read-only and which paths support writes.
7. If native mounting is unavailable
Some CI containers and agent sandboxes cannot mount FUSE. Use direct ops instead:
1parlo connections2parlo ls linear/3parlo cat linear/README.md4parlo ls linear/issues/5parlo cat linear/issues/ENG-123.md6parlo write main/reports/billing-report.md --from /tmp/billing-report.mdSame resources, no native mount required.
8. Use with Codex or another coding agent
Give the agent a small instruction:
1Use Parlo for connected services. Prefer the native ~/parlo mount when available. First read each connection's README.md. Use grep before reading large detail files. Do not print tokens or files under ~/.parlo.Then the agent can work like this:
1parlo mount2cd ~/parlo3cat github/README.md4grep -R "billing" github/issues5cat github/issues/42.md6cat linear/issues/ENG-123.md7cat stripe/customers/cus_8x92.mdThe agent does not need a giant service-specific tool catalog. It follows paths, reads only what it needs, and leaves a file-based trail a human can inspect.