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

bash2 lines
1curl -fsSL https://parlo.run/install | sh2parlo setup

Or install from npm:

bash2 lines
1npm install -g parlofs2parlo setup

The 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:

bash3 lines
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:

bash1 line
1parlo connections

Example output:

bash6 lines
1API Connections:2  ● GitHub (github) -> ~/parlo/github3  ● Linear (linear) -> ~/parlo/linear4  ● Stripe (stripe) -> ~/parlo/stripe5Drives:6  ● Main (main) -> ~/parlo/main

3. Mount the filesystem

bash3 lines
1parlo mount2cd ~/parlo3ls

Example output:

bash1 line
1github  linear  main  stripe

Each connected service is now a folder. Start by reading the service README so you know the layout.

bash1 line
1cat linear/README.md

Example output:

md13 lines
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:

bash1 line
1grep -R "billing\|invoice\|subscription" github/issues | head -20

Example output:

bash3 lines
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 plans

Read only the relevant issue:

bash1 line
1cat github/issues/42.md

Example output:

md10 lines
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:

bash1 line
1grep -R "stale invoice\|past_due\|billing page" linear/issues

Example output:

bash2 lines
1linear/issues/ENG-123.md:title: Fix stale billing status on account page2linear/issues/ENG-123.md:labels: billing, bug

Read the Linear ticket:

bash1 line
1cat linear/issues/ENG-123.md

Example output:

md10 lines
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:

bash1 line
1cat stripe/customers/cus_8x92.md

Example output:

md9 lines
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:

bash14 lines
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.14EOF

Copy it into a Parlo cloud drive:

bash2 lines
1mkdir -p main/reports2cp /tmp/billing-report.md main/reports/billing-report.md

Verify it is there:

bash1 line
1cat main/reports/billing-report.md

Example output:

md4 lines
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:

bash8 lines
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.md

A 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:

bash6 lines
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.md

Same resources, no native mount required.

8. Use with Codex or another coding agent

Give the agent a small instruction:

bash1 line
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:

bash7 lines
1parlo mount2cd ~/parlo3cat github/README.md4grep -R "billing" github/issues5cat github/issues/42.md6cat linear/issues/ENG-123.md7cat stripe/customers/cus_8x92.md

The 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.