Skip to main content
looking for ready-to-use pipes? browse the pipe store →. if a pipe fails, use pipe debugging.

browse and install community pipes

to find and install pipes others have made:
  1. open screenpipe and click Pipes in the sidebar
  2. click the Discover tab at the top
  3. browse featured and community pipes, or search for a specific one
  4. click GET to install any pipe
  5. go to Settings → Pipes to enable it and configure the schedule
you can also browse all available pipes online at screenpi.pe/pipes before installing. screenpipe pipes page

quick start — paste this into claude code

copy this prompt into claude code, cursor, or any AI coding assistant:
replace [DESCRIBE WHAT YOU WANT] with your use case — e.g. “tracks my time in toggl based on what apps I’m using”, “writes daily summaries to obsidian”, “sends me a slack message if I’ve been on twitter for more than 30 minutes”.

what are pipes?

pipes are automated workflows that run on your screenpipe data at regular intervals. each pipe is a markdown file with a prompt and a schedule. under the hood, screenpipe runs a coding agent (like pi) that can query your screen data, call APIs, write files, and take actions.

use chat, MCP, or a pipe?

a pipe is just one file: pipe.md

creating a pipe

create a folder in ~/.screenpipe/pipes/ with a pipe.md file:

manage pipes from the CLI

every pipe action is available from the CLI — no separate install. npx -y screenpipe@latest, bunx screenpipe@latest, and bun x screenpipe@latest are equivalent; use whichever the machine has.
run CLI commands from a clean temp directory to avoid node_modules conflicts: cd "$(mktemp -d)" && npx -y screenpipe@latest pipe list.
this is how you turn a one-off into a recurring cron automation: write a pipe.md with a schedule (e.g. 0 9 * * *), install then enable it, and screenpipe runs it on that cron. you can also hand these commands to any AI agent — e.g. “create a screenpipe pipe that summarizes my day at 6pm” — and let it scaffold, install, and enable the pipe for you.

pipe.md format

every pipe.md starts with YAML frontmatter between --- markers, followed by the prompt:

frontmatter fields

context header

before execution, screenpipe prepends a context header to the prompt:
the AI agent uses these values to query the right time range, identify which pipe is running, and format output correctly. no template variables needed — just write plain instructions.

schedule formats

example: pipe with longer timeout for slow models

if your pipe uses a slower AI model or runs complex analysis, increase the timeout:
in this example, the pipe will run daily and has up to 40 minutes to complete. without the timeout field, it would be limited to 5 minutes and likely timeout on slower models.

manage pipes

use the desktop app (settings → pipes) or the REST API:

http api

when screenpipe is running, pipes are also manageable via the local API:

app ui

go to settings → pipes to see all installed pipes, toggle them on/off, run them manually, edit the pipe.md directly, select an AI preset, and view logs.

examples

time tracking (toggl)

daily journal (obsidian)

standup report

AI presets

in the screenpipe app, go to settings → AI settings to configure presets (model + provider combinations). in settings → pipes, you can assign a preset to each pipe — this overrides the model/provider in the frontmatter. screenpipe auto-creates a default preset using screenpipe cloud.

AI providers

by default, pipes use screenpipe cloud — no setup needed if you have a screenpipe account. to use your own AI subscription (Claude Pro, ChatGPT Plus, Gemini, or API keys), pipes reuse pi’s native auth system:

option 1: subscription (free with existing plan)

option 2: API key

add to ~/.pi/agent/auth.json:
or set environment variables: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY.

using in a pipe

add provider to your pipe.md frontmatter:
provider resolution: preset (if set) → frontmatter provider/model → screenpipe cloud.

secrets

store API keys in .env files inside the pipe folder:
the pipe prompt can reference them: source .env && curl -u $TOGGL_API_KEY:api_token ... never put secrets in pipe.md — the prompt may be visible in logs.

architecture

  • agent ≠ model: the agent is the CLI tool (pi, claude-code). the model is the LLM (haiku, opus, llama).
  • one pipe runs at a time (global semaphore prevents overlap)
  • lookback = schedule interval (capped at 8h to prevent context overflow)
  • logs saved to ~/.screenpipe/pipes/{name}/logs/ as JSON

troubleshooting

for a production-style debugging flow, including logs, stuck runs, provider auth, connection proxies, and permissions, see debug screenpipe pipes.

pipe scheduled but doesn’t run

problem: windows task scheduler or cron shows the task running, but the pipe produces no output. solution: the pipe agent needs to know which pipe it’s executing. the context header includes Pipe name: <name> so the agent can identify itself. make sure:
  1. the pipe folder name matches the expected pipe name (e.g., ~/.screenpipe/pipes/my-pipe/)
  2. the pipe is listed in npx -y screenpipe@latest pipe list
  3. check logs: npx -y screenpipe@latest pipe logs my-pipe

pipe runs but produces empty output

problem: pipe executes successfully but generates no files or notifications. solution: ensure your pipe prompt includes concrete instructions to:
  • query screenpipe API (e.g., curl http://localhost:3030/search?...)
  • write output files (e.g., to ./output/<date>.md)
  • or send notifications (e.g., POST http://localhost:11435/notify)
test locally first: npx -y screenpipe@latest pipe run my-pipe to see logs before relying on scheduled execution.

windows task scheduler permission denied

problem: windows task scheduler fails with permission errors when running pipes. solution: ensure screenpipe engine is running before the task executes. pipes require the local API at http://localhost:3030. schedule the pipe after the app starts, or use the desktop UI instead.

security & permissions

by default, pipes have full API access — they can call any screenpipe endpoint. this is fine for pipes you write yourself, but if a pipe doesn’t need write access, you can restrict it. add permissions to your frontmatter:

presets

custom rules

use typed patterns for fine-grained control over endpoints and data:
rule types: Api(METHOD /path), App(name), Window(glob), Content(type). deny always wins.
if your pipe doesn’t need to write data, add permissions: reader — it prevents accidental side effects like ending a meeting or deleting data.

protecting api keys & credentials

if you worry that an agent could access API keys or passwords visible on screen, use .env files (never put secrets in pipe.md itself):
then reference them in your pipe prompt:
why this is safe: .env files live on disk outside screenpipe’s recording scope — agents execute shell commands with access to source .env, but screenpipe never captures the secrets on screen. credentials are only visible in pipe logs (which you control) and memory, not in screen recordings. to further restrict what an agent can do, use permissions: reader — pipes with read-only access cannot make API calls to external services, only query your screen data. see the full reference: pipe permissions →

built-in pipes

screenpipe ships with 7 template pipes. browse them in the app under pipes, or see the full catalog: pipe store → need help building pipes? join our discord — share your pipes, get feedback, and see what others are building. download screenpipe →