Support
Pupa is open source. Here's how to get help.
Report a bug or request a feature
The fastest way to get help is to open an issue on the relevant repository. Pick the one that matches your problem:
pupa— issues for the iOS / macOS app.pupa-backend— issues for the backend.marketplace— issues for the marketplace.
Prefer email, or have something that doesn't belong in a public issue? Write to pupa-app-help@proton.me.
Frequently asked questions
How do I pair the app to a backend?
Run your own backend (locally with pupa-backend run, or deploy your own cloud instance), then mint a pairing code with pupa-backend pair. In the app, go to Settings ▸ Backend ▸ Edit and paste or scan the code. The app defaults to http://localhost:8004/; point it at a hosted instance from the same screen. Full instructions are in the pupa-backend README.
What are the local, Cloudflare, and Tailscale connection modes?
The app pairs to your backend, so you choose how the app reaches it. The pupa-backend setup wizard writes the choice into your config, and pupa-backend pair derives the right URL automatically. Three modes:
- Local — the backend runs on the same machine or LAN as the app, at
http://localhost:8004/(or a self-signed HTTPS address with certificate pinning over the local network). Nothing is exposed to the internet. Best when the macOS app runs on the same laptop as the backend, or your phone is on the same Wi-Fi. - Cloudflare tunnel —
cloudflaredpublishes your local backend at a public HTTPS URL through Cloudflare's edge, with no port-forwarding. Use a quick tunnel (a throwaway*.trycloudflare.comaddress) to get going, or a named tunnel on your own domain for a stable URL. Reach your backend from anywhere. - Tailscale — your backend joins your private Tailscale (WireGuard) network and the app connects to its Tailscale hostname or IP. You reach a home backend from your phone anywhere, but it stays private to your tailnet and is never published to the public internet.
Not sure which to pick? Start local, switch to Tailscale when you want your own devices to reach it from outside the house, and use a Cloudflare tunnel when you need a public URL others can hit.
How do I share my screen with the agent? (macOS only)
Screen-share is an optional macOS-only sidecar that streams your screen to the agent as live WebRTC video. Enable the broker on your backend (screenshare: true in the config, or PUPA_SCREENSHARE=1), then run pupa-backend screenshare on the same Mac to start publishing. The sidecar is a separate Swift package built from source (macOS 14+); the first run compiles it. It captures your screen and publishes the video track to the /screenshare/ws broker on your backend, so the agent can see what you see. The broker is off by default and stays off on the hosted multi-tenant deployment — it only makes sense when you run your own backend.
How do I import a .pupa bundle?
Open a .pupa file with Pupa (for example, tap one you downloaded), or use Settings ▸ Import & Export. On import the app shows a confirm sheet naming the MyApp and its agent prompts — review them, then install. Bundles are inert JSON and are validated as untrusted input, so nothing runs until you grant it your host's capabilities.
How do I install apps from the marketplace?
In the app, open Settings ▸ Marketplace, pick an app, review its agent prompts in the install preview, and install. A marketplace is just an HTTPS index.json pointing at .pupa files — the official one is on GitHub, and anyone can host their own.
How do I publish my own MyApp?
Export your MyApp as a .pupa file from Settings ▸ Import & Export, then fork the marketplace repo, add a directory under apps/ with your bundle and metadata, run the validator, and open a pull request. The repo's CONTRIBUTING guide walks through the checklist.
Which model providers does Pupa support?
Your backend does the talking to the model, so it supports whatever your backend is configured with — Anthropic, Amazon Bedrock, or any OpenAI-compatible endpoint. Credentials live in your backend's environment; they never reach the app.
Do I need to know how agents work to contribute a component?
No. A canvas component is a self-contained SwiftUI view with a typed data model plus render and mutator tools. The pupa repo ships an "adding a component" recipe, and the compiler enforces completeness — no agentic knowledge required to build an agent-compatible surface.