How pline treats your agent, your keys and your memory.

Short version: no account, no pline server, and nothing hidden about what the agent is doing. The long version is below, including what is not done yet.

What leaves your Mac

Your agent talks to its own provider, and websites see your browsing, as with any browser. When you install an agent from Settings, its pinned package comes from the npm registry or its maker’s own installer, and watchr comes from PyPI the first time it starts, with none of your data. Everything else stays on this Mac. Each part is explained below.

Select a part of the diagram

Choose any box to see what it holds and where its data goes. Every explanation is also listed below.

Stays on your Mac

  1. pline’s folder

    Spaces, tabs, tasks and import receipts live in ~/Library/Application Support/pline/ on this Mac. The tasks file keeps each prompt, its last three step titles, the start of the answer and the tab’s title, newest 100.

  2. pline-memory and watchr helpers

    Two small local servers pline gives your agent: one for memory and one for web checks with watchr. pline blanks your API key for both. watchr works inside the tab you are on, through the DevTools port.

  3. Memory file

    A plain SQLite file only your user account can read (mode 0600, in an owner-only folder), never synced. Page addresses are saved without their query, fragment or login part. It is not encrypted yet.

  4. macOS Keychain

    Used only if you paste an API key for an agent and turn it on. The key stays in the Keychain and is handed only to that agent’s own process. Tools the agent starts may inherit it.

  5. DevTools port

    Listens on 127.0.0.1 only and gets a new random port at each launch. pline shows it in the sidebar footer, and asks before an agent takes control of a tab through it.

  6. pline app

    The browser itself. It starts your agent, talks to it over the Agent Client Protocol and keeps your Spaces in its own folder. It adds no telemetry.

  7. Your agent

    Claude Code today (Codex, Gemini CLI, Goose and Factory Droid connect from Settings), run as a local process with its own login. pline never reads its credential folders.

Leaves your Mac

  1. Websites you visit

    Sites see your traffic, as in any browser. pline sends Google Chrome’s user-agent string for a Mac (Safari’s on the WebKit fallback) and does not add its own name.

  2. Your agent’s provider

    Your agent sends your prompts there with its own login. That is between you and them, just as it is when you use the agent in a terminal.

  3. Installs: npm, PyPI, makers

    Install in Settings › Agents fetches the agent’s pinned package from the npm registry (Goose and Factory Droid use their makers’ installers), and Node.js from nodejs.org if you need pline’s copy. watchr comes from PyPI with uvx the first time it starts. None of your data goes with these requests, and later launches use the local copy.

Goes to pline: nothing

  1. pline servers: none

    There is no account, no sync and no pline backend, so there is nothing on our side for your data to go to.

Your agent, your login

pline starts your agent as a local process that uses its own login. pline never reads the agent’s credential folders (~/.claude, ~/.codex, ~/.gemini, ~/.config/goose, ~/.factory). It never shows, stores or relays a subscription token, and it never handles your provider login. When an agent needs a login, Log In in Settings › Agents opens Terminal to run the agent’s own login command there, and pline never sees what you type. It notices when the login is done and tests the connection without sending a prompt.

Install shows the exact command before anything runs, and the agent goes into pline’s own folder. The one exception is Factory Droid, whose installer writes ~/.local/bin; the install sheet says so.

pline Settings, Agents pane: ‘The agent you pick works beside your tabs, in every Space.’ Claude Code is connected and the default for new Spaces; Factory Droid needs a login; Codex, Gemini CLI and Goose are available to install; and the watchr switch sits under Agent tools.
What pline touches
Itempline doespline never does
Your agent’s loginStarts the agent so it can use the login it already hasReads ~/.claude, ~/.codex, ~/.gemini, ~/.config/goose or ~/.factory, or sees what you type when the agent asks you to log in (that happens in Terminal, with the agent’s own login command)
API keys (optional)Keeps a key you paste in the macOS Keychain and hands it only to that agent’s processShows it again, logs it or sends it to pline servers (there are none)
Your promptsPasses them to your agent along with the page and Space you are onLogs prompt or tool contents

API keys, only if you want them

You can paste a key under Advanced on an agent’s card in Settings › Agents (Goose keeps its keys in its own setup). It is kept in the macOS Keychain, used only while its switch is on, and passed only to that agent’s own process. pline blanks the key for the memory and watchr helpers it adds.

Tools your agent starts itself may inherit the key.

The Advanced section of Claude Code in pline Settings: ‘Use an API key instead. Only if you pay for an Anthropic API account. Most people should keep the login.’ An empty ‘Paste your API key’ field with Save, and a switch, off, reading ‘Use this key instead of the login. Off until you turn it on. Then pline gives the key to Claude Code only.’

Memory on this Mac

  • The memory is a plain SQLite file with mode 0600, in a folder only your user account can open. It is never synced.
  • Page addresses are saved without their query string, fragment or login part.
  • Forget is a soft delete, so you can restore an entry. You can see and forget every entry in the Memory tab, export them all to JSON, or forget everything in Settings › Memory.
  • pline asks the first time an agent wants to save something. After that you choose: save it and tell me, ask me first, or don’t allow. You can also stop agents remembering anything on a site.
  • It refuses anything that looks like a secret (API keys, tokens, passwords, card numbers, private keys), and anything from banking and finance, health, government ID, adult or password-manager sites, or sign-in and checkout pages.
  • It is not encrypted yet. Encryption at rest is planned.
The Memory pane of pline Settings: a switch to let agents remember things; what happens when an agent saves something (Save it and tell me, Ask me first, Don’t allow); a switch for whether agents can read memories; Stored, ‘A plain SQLite file on this Mac, never synced.’ with Export… and Forget Everything…; and Forget automatically.
Settings › Memory.

While your agent works

Agent work is labelled
You see the amber ring, the strip and “Acting” whenever an agent works on a tab. Before an agent takes control of a tab through watchr, pline asks you, and a Space can remember your answer. To websites, pline sends Google Chrome’s user-agent string for a Mac (Safari’s on the WebKit fallback) and does not add its own name.
You approve, you can stop
Permission requests always reach the screen: in the panel, in the run strip, and as “Needs approval” for a task running in the background. The choices are the agent’s own: allow once, always allow or reject. Stop (⌥⌘. (Option-Command-Period)) works at any time.
Site permissions start at Don’t Allow
Camera, microphone, location and notifications are denied unless you allow them, and pline remembers your answer for each site until you quit. Any link that wants to open another app asks you first.
Chromium’s sandbox is on
Every Chromium process that handles web content, the GPU or the network runs inside Chromium’s own macOS sandbox. pline will not start Chromium without it, and falls back to WebKit instead.
Small logs
pline does not log prompt or tool contents, or tool titles. The tasks file keeps each prompt, its last three step titles, the start of the agent’s answer and the tab’s title, for the newest 100 tasks. pline adds no telemetry, and this site sets no cookies.

Imports copy structure only

Imports bring Spaces, tabs, folders, favorites and bookmarks. Never cookies, passwords, history or extensions.

Safari import needs Full Disk Access, and pline reads only Bookmarks.plist. Every import can be undone, and Settings › Import lists past imports so you can undo one later.

The Import pane of pline Settings: Arc, Chrome and Safari with Import buttons, other browsers in a Choose menu, the note ‘Never passwords, cookies, history or extensions.’ and Past imports.

Still to come

  • Encryption for memory at rest. Memory is a plain local database today, kept on your Mac.

What we won’t claim

pline is not a guarantee against prompt injection, and it does not stop your agent’s provider from receiving the prompts you send it. Your traffic to websites is your traffic, as in any browser.

Bring your agent. We’ll bring the browser.

pline 1.0 is out. Download it, connect the agent you already use, and start working.

Download for Mac

macOS 14 or later · Apple silicon · no account