papercliped 2.2.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +6 -0
- package/README.md +8 -4
- package/dist/site/markdown.js +26 -5
- package/dist/site/site.js +8 -1
- package/package.json +1 -1
- package/site/docs/connect-your-paperclip.md +139 -93
- package/site/docs/faq.md +10 -1
- package/site/docs/getting-started.md +1 -1
- package/site/docs/host-coolify.md +78 -0
- package/site/docs/host-fly.md +129 -0
- package/site/docs/host-railway.md +105 -0
- package/site/docs/host-render.md +79 -0
- package/site/docs/host-vps.md +202 -0
- package/site/docs/hosting.md +105 -0
- package/site/docs/prompts.md +349 -0
- package/site/docs/signup.md +1 -1
- package/site/docs/troubleshooting.md +7 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v2.3.0 — host your Paperclip anywhere, and a prompt gallery
|
|
6
|
+
|
|
7
|
+
- **Host your Paperclip: a step-by-step guide for every option.** A new docs section takes you from nothing to a running Paperclip with a public `https://` address, connected to Papercliped and answering your first prompt. It covers your own computer with a free tunnel (Cloudflare Tunnel, Tailscale Funnel, ngrok), a VPS with Docker and Caddy (Hetzner, DigitalOcean, Linode, Oracle's free tier), Railway, Render, Fly.io and Coolify, with a comparison of cost and effort. Every guide uses the official Paperclip image and the settings current Paperclip needs: authenticated mode with public exposure, your public URL, the two secrets, a persistent disk at `/paperclip`, creating the first admin with `paperclipai auth bootstrap-ceo`, and signing in your agents with API keys or a subscription. They also cover updates and backups. Hosts that sleep or have no disk are flagged as unsuitable.
|
|
8
|
+
- **Prompt gallery.** More than 40 ready-to-copy prompts at papercliped.co/prompts and in the docs (Guides → Prompt gallery). Run Paperclip in plain words instead of clicking through the dashboard: catch up in the morning, hand out issues, wake an agent and follow its run, answer approvals, set budgets and get reports. Each prompt shows the access level it needs and the tools it uses. You can search and filter by category or level.
|
|
9
|
+
- **Docs fixes:** the setup guide now uses Paperclip's real setting names and the current health check fields. Troubleshooting covers "hostname not allowed", connections that stop after Paperclip's 30-day key expiry (reconnect to fix), and agents stopping on restarts. The FAQ explains how Papercliped relates to Paperclip's new built-in MCP endpoint. Numbered steps with code blocks, and quotes, now render properly in the docs.
|
|
10
|
+
|
|
5
11
|
## v2.2.1 — the Papercliped plugin now installs in Paperclip
|
|
6
12
|
|
|
7
13
|
- **Fixed: the Papercliped plugin could not be installed in Paperclip.** Paperclip rejected it with a bare "400" because the sidebar entry declared a page route, which Paperclip only allows on pages. Installing it, automatically while connecting or by hand from Settings → Plugins, now works. The plugin’s tests now run Paperclip’s own manifest check so this can’t come back. If you ticked the box while connecting on 2.2.0, nothing was installed: connect again, or install it from Settings → Plugins.
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Free and open source. Website: [papercliped.co](https://papercliped.co) · Docs:
|
|
|
12
12
|
|
|
13
13
|
## Add it to your AI app
|
|
14
14
|
|
|
15
|
-
You need a Paperclip with a public `https` address
|
|
15
|
+
You need a Paperclip with a public `https` address. Don't have one yet? [Host your Paperclip](https://docs.papercliped.co/hosting) has step-by-step guides for your own computer (free tunnel), a VPS, Railway, Render, Fly.io and Coolify. The first time you connect, you approve the request inside your own Paperclip, pick a username, save the secret key you're shown once, and choose **Read only** or **Full control**.
|
|
16
16
|
|
|
17
17
|
The connector address for every app is:
|
|
18
18
|
|
|
@@ -80,9 +80,13 @@ Add `--env PAPERCLIP_READ_ONLY=1` for reports and sync only.
|
|
|
80
80
|
|
|
81
81
|
## What you can ask
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
- "
|
|
83
|
+
Talk to your AI app instead of clicking through the dashboard:
|
|
84
|
+
|
|
85
|
+
- "Catch me up on my Paperclip." · "Which agents are over budget?"
|
|
86
|
+
- "Give the Web Engineer an issue to fix the signup page, and wake them." · "Wake the CEO, wait until they finish, then summarise."
|
|
87
|
+
- "Approve the hire request." · "Weekly report, please."
|
|
88
|
+
|
|
89
|
+
More than 40 ready-to-copy prompts: [prompt gallery](https://papercliped.co/prompts).
|
|
86
90
|
|
|
87
91
|
There are 30 tools ([full list](https://docs.papercliped.co/tools)). **Read only** can look at agents, issues, goals, costs and reports. **Full control** can use every tool. The AI asks before anything that can't be undone, and you can change the level or disconnect at any time.
|
|
88
92
|
|
package/dist/site/markdown.js
CHANGED
|
@@ -55,21 +55,42 @@ export function renderMarkdown(md) {
|
|
|
55
55
|
out.push(`<div class="tw"><table><thead><tr>${head.map((c) => `<th>${inline(c)}</th>`).join("")}</tr></thead><tbody>${rows.map((r) => `<tr>${r.map((c) => `<td>${inline(c)}</td>`).join("")}</tr>`).join("")}</tbody></table></div>`);
|
|
56
56
|
continue;
|
|
57
57
|
}
|
|
58
|
+
if (/^>/.test(line)) {
|
|
59
|
+
const buf = [];
|
|
60
|
+
while (i < lines.length && /^>/.test(lines[i]))
|
|
61
|
+
buf.push(lines[i++].replace(/^>\s?/, ""));
|
|
62
|
+
out.push(`<blockquote>${renderMarkdown(buf.join("\n"))}</blockquote>`);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
58
65
|
const ul = /^[-*]\s+/.test(line), ol = /^\d+\.\s+/.test(line);
|
|
59
66
|
if (ul || ol) {
|
|
60
67
|
const items = [];
|
|
61
68
|
const re = ul ? /^[-*]\s+(.*)$/ : /^\d+\.\s+(.*)$/;
|
|
62
69
|
while (i < lines.length && re.test(lines[i])) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
const body = [re.exec(lines[i++])[1]];
|
|
71
|
+
// An item continues on indented lines, including fenced code and blank lines followed by more indented content.
|
|
72
|
+
while (i < lines.length && !re.test(lines[i])) {
|
|
73
|
+
if (/^\s+\S/.test(lines[i]))
|
|
74
|
+
body.push(lines[i++]);
|
|
75
|
+
else if (!lines[i].trim() && /^\s+\S/.test(lines[i + 1] ?? "") && !re.test(lines[i + 1] ?? ""))
|
|
76
|
+
body.push(lines[i++]);
|
|
77
|
+
else
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
const rich = body.some((l) => /^\s*```/.test(l) || !l.trim());
|
|
81
|
+
if (!rich)
|
|
82
|
+
items.push(`<li>${inline(body.map((l) => l.trim()).join(" "))}</li>`);
|
|
83
|
+
else {
|
|
84
|
+
const rest = body.slice(1);
|
|
85
|
+
const pad = Math.min(...rest.filter((l) => l.trim()).map((l) => /^\s*/.exec(l)[0].length));
|
|
86
|
+
items.push(`<li>${renderMarkdown([body[0], ...rest.map((l) => l.slice(Math.min(pad, /^\s*/.exec(l)[0].length)))].join("\n"))}</li>`);
|
|
87
|
+
}
|
|
67
88
|
}
|
|
68
89
|
out.push(ul ? `<ul>${items.join("")}</ul>` : `<ol>${items.join("")}</ol>`);
|
|
69
90
|
continue;
|
|
70
91
|
}
|
|
71
92
|
const para = [];
|
|
72
|
-
while (i < lines.length && lines[i].trim() && !/^(#{1,3}\s|```|[-*]\s|\d+\.\s)/.test(lines[i]) && !/^\|.*\|\s*$/.test(lines[i]))
|
|
93
|
+
while (i < lines.length && lines[i].trim() && !/^(#{1,3}\s|```|[-*]\s|\d+\.\s|>)/.test(lines[i]) && !/^\|.*\|\s*$/.test(lines[i]))
|
|
73
94
|
para.push(lines[i++].trim());
|
|
74
95
|
out.push(`<p>${inline(para.join(" "))}</p>`);
|
|
75
96
|
}
|
package/dist/site/site.js
CHANGED
|
@@ -9,9 +9,16 @@ const NAV = [
|
|
|
9
9
|
{ slug: "getting-started", title: "Getting started" },
|
|
10
10
|
{ slug: "what-is-papercliped", title: "What is Papercliped?" },
|
|
11
11
|
{ slug: "signup", title: "Create your account" },
|
|
12
|
-
{ slug: "
|
|
12
|
+
{ slug: "hosting", title: "Host your Paperclip" },
|
|
13
|
+
{ slug: "connect-your-paperclip", title: "At home, with a tunnel" },
|
|
14
|
+
{ slug: "host-vps", title: "VPS with Docker" },
|
|
15
|
+
{ slug: "host-railway", title: "Railway" },
|
|
16
|
+
{ slug: "host-render", title: "Render" },
|
|
17
|
+
{ slug: "host-fly", title: "Fly.io" },
|
|
18
|
+
{ slug: "host-coolify", title: "Coolify" },
|
|
13
19
|
{ slug: "other-ai-apps", title: "Any AI app (MCP)" },
|
|
14
20
|
{ slug: "chatgpt", title: "ChatGPT setup" },
|
|
21
|
+
{ slug: "prompts", title: "Prompt gallery" },
|
|
15
22
|
{ slug: "permissions", title: "Permissions" },
|
|
16
23
|
{ slug: "manage", title: "Manage connections" },
|
|
17
24
|
{ slug: "paperclip-plugin", title: "Paperclip plugin" },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "papercliped",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Papercliped — connect Claude, ChatGPT and any MCP app to your Paperclip: control agents, sync, report. MCP server + hosted multi-tenant OAuth bridge + public stats API.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -1,120 +1,166 @@
|
|
|
1
|
-
#
|
|
1
|
+
# At home, with a tunnel
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Run Paperclip on your own computer and give it a public `https://` address with a free tunnel. You don't open any ports on your router. This is the cheapest way to start, and a good way to try Papercliped before you rent a server.
|
|
4
4
|
|
|
5
|
-
You
|
|
5
|
+
**You'll end up with:** Paperclip on your computer, reachable at a public address like `https://paperclip.yourdomain.com` or `https://my-pc.my-tailnet.ts.net`, connected to Papercliped.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- **A public `https://` address on port 443** that answers over the internet. Private, LAN, `localhost` and plain `http://` addresses are refused on purpose.
|
|
9
|
-
- **Paperclip in authenticated mode and public exposure.** You can check from any computer:
|
|
10
|
-
```
|
|
11
|
-
curl https://your-address/api/health
|
|
12
|
-
```
|
|
13
|
-
A healthy answer is JSON that includes `"status":"ok"`, `"deploymentMode":"authenticated"` and `"deploymentExposure":"public"`. (On Windows PowerShell, `curl.exe https://your-address/api/health` works the same way.)
|
|
14
|
-
- **No login wall or bot challenge in front of `/api/*`.** If you put something like Cloudflare Access, "Under Attack" mode or a managed challenge in front of Paperclip, it must skip `/api/*`, or Papercliped will be blocked.
|
|
15
|
-
- **Paperclip must accept the new hostname.** Paperclip can reject hostnames it doesn't know, and public mode needs its public URL set. Paperclip's own settings for this include `PAPERCLIP_PUBLIC_URL` and `PAPERCLIP_ALLOWED_HOSTNAMES`; the exact steps are in Paperclip's deployment docs (search "Paperclip deployment modes" on docs.paperclip.ing). Check them there rather than guessing.
|
|
7
|
+
**Good to know:** while your computer sleeps or is off, your agents and your AI app's connection stop. For a Paperclip that's always on, use a [VPS or a hosting platform](/docs/hosting).
|
|
16
8
|
|
|
17
|
-
|
|
9
|
+
## 1. Choose a tunnel
|
|
18
10
|
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
| Tunnel | Your address | Stays the same? | Needs | Good for |
|
|
12
|
+
| --- | --- | --- | --- | --- |
|
|
13
|
+
| **Cloudflare Tunnel** | `https://paperclip.yourdomain.com` | Yes | A domain on Cloudflare (free plan) | Daily use (recommended) |
|
|
14
|
+
| **Tailscale Funnel** | `https://<computer>.<tailnet>.ts.net` | Yes | A free Tailscale account | Daily use without a domain |
|
|
15
|
+
| **ngrok** | one free `*.ngrok-free.app` address | Yes | A free ngrok account | Daily use without a domain |
|
|
16
|
+
| **Cloudflare quick tunnel** | random `*.trycloudflare.com` | **No, changes every restart** | Nothing | Trying it for an afternoon |
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
7. **Run it.** To try it first:
|
|
48
|
-
```
|
|
49
|
-
cloudflared tunnel run papercliped-paperclip
|
|
50
|
-
```
|
|
51
|
-
To keep it running (starts with your computer), install it as a service:
|
|
52
|
-
- **macOS:** `cloudflared service install` (runs when you log in) or `sudo cloudflared service install` (runs at boot).
|
|
53
|
-
- **Linux:** `cloudflared service install` (with `sudo` if needed).
|
|
54
|
-
- **Windows:** run `cloudflared.exe service install` from an Administrator PowerShell. A Windows service may not read the config from your user folder; check Cloudflare's "Run as a service on Windows" page for where it expects `config.yml`.
|
|
55
|
-
8. **Check it** from any computer:
|
|
56
|
-
```
|
|
57
|
-
curl https://paperclip.yourdomain.com/api/health
|
|
58
|
-
```
|
|
59
|
-
You should see the JSON described above.
|
|
18
|
+
Pick one and **work out your address first**: Paperclip needs to know it during setup (step 2). The tunnel sections below show how to get it.
|
|
19
|
+
|
|
20
|
+
## 2. Install Paperclip in public mode
|
|
21
|
+
|
|
22
|
+
You need **Node.js 24.11 or newer** (check with `node -v`; get it from nodejs.org).
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
npx paperclipai onboard
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
When it asks:
|
|
29
|
+
|
|
30
|
+
- **Deployment mode:** `authenticated` (people sign in).
|
|
31
|
+
- **Exposure:** `public`.
|
|
32
|
+
- **Public URL:** your tunnel address from step 1, for example `https://paperclip.yourdomain.com` (with `https://`, no slash at the end).
|
|
33
|
+
- **Bind:** `loopback`. The tunnel connects from your own computer, so Paperclip doesn't need to listen on your network.
|
|
34
|
+
|
|
35
|
+
These choices are the same as the settings `PAPERCLIP_DEPLOYMENT_MODE=authenticated`, `PAPERCLIP_DEPLOYMENT_EXPOSURE=public` and `PAPERCLIP_PUBLIC_URL`, which you can also set as environment variables. Onboarding creates the secrets Paperclip needs and saves them in `~/.paperclip/instances/default/.env`. Start Paperclip with:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
npx paperclipai run
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
It listens on port **3100**. (If something else already uses 3100, Paperclip quietly picks another port and prints it; use that port in the tunnel instead.)
|
|
60
42
|
|
|
61
|
-
**
|
|
43
|
+
**Already running Paperclip on this computer** in the default `local_trusted` mode (no login)? Change it with `npx paperclipai configure --section server`: choose `authenticated`, `public`, and your tunnel address. Never put a `local_trusted` Paperclip behind a public address: anyone who finds it could control it.
|
|
62
44
|
|
|
63
|
-
|
|
64
|
-
All of these are free. They differ in how stable the address is.
|
|
45
|
+
**Prefer Docker?** Use the Compose file from the [VPS guide](/docs/host-vps#5-create-the-docker-compose-file) without the `caddy` service, add `ports: ["127.0.0.1:3100:3100"]` to the Paperclip service, and set `DOMAIN` to your tunnel's hostname.
|
|
65
46
|
|
|
66
|
-
|
|
67
|
-
| --- | --- | --- | --- |
|
|
68
|
-
| Tailscale Funnel | `https://<machine>.<tailnet>.ts.net` | Yes | Daily use |
|
|
69
|
-
| ngrok free plan | one free static `ngrok-free.app` / `ngrok-free.dev` domain | Yes | Daily use, with a caveat below |
|
|
70
|
-
| Cloudflare quick tunnel | random `*.trycloudflare.com` | **No, changes every restart** | Trying Papercliped only |
|
|
47
|
+
## 3. Start the tunnel
|
|
71
48
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
49
|
+
Follow the section for the tunnel you chose, then come back for step 4.
|
|
50
|
+
|
|
51
|
+
### Cloudflare Tunnel (with your domain)
|
|
52
|
+
|
|
53
|
+
Stable address on your own domain. The tunnel and DNS are free on Cloudflare's free plan; the domain itself isn't (Cloudflare Registrar sells them at cost).
|
|
54
|
+
|
|
55
|
+
1. **Put your domain on Cloudflare:** create a free account, add your domain, and switch its nameservers to the two Cloudflare gives you (at the company where you bought the domain). Wait until Cloudflare shows it as active.
|
|
56
|
+
2. In the Cloudflare dashboard, open **Zero Trust → Networks → Tunnels → Create a tunnel**, choose **Cloudflared**, and name it `paperclip`.
|
|
57
|
+
3. Cloudflare shows an install command for Windows, macOS or Linux that includes a token, like `cloudflared service install eyJ…`. Run it on this computer. It installs `cloudflared` as a service that starts with the computer. (Keep the token private; it's the key to your tunnel.)
|
|
58
|
+
4. Under **Public Hostname**, add: subdomain `paperclip`, your domain, service type **HTTP**, URL **`localhost:3100`**. Save.
|
|
59
|
+
|
|
60
|
+
That's it: `https://paperclip.yourdomain.com` now reaches your Paperclip. Don't turn on Cloudflare Access, Bot Fight Mode or a WAF challenge for this hostname (or exempt `/api/*`), or Papercliped will be blocked.
|
|
61
|
+
|
|
62
|
+
<details><summary>Prefer the command line?</summary>
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
cloudflared tunnel login
|
|
66
|
+
cloudflared tunnel create paperclip
|
|
67
|
+
cloudflared tunnel route dns paperclip paperclip.yourdomain.com
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Create `config.yml` in your `.cloudflared` folder (`~/.cloudflared` on macOS and Linux):
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
tunnel: <TUNNEL-ID>
|
|
74
|
+
credentials-file: <PATH-TO-THE-CREDENTIALS-FILE>.json
|
|
75
|
+
ingress:
|
|
76
|
+
- hostname: paperclip.yourdomain.com
|
|
77
|
+
service: http://localhost:3100
|
|
78
|
+
- service: http_status:404
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Try it with `cloudflared tunnel run paperclip`, then install it as a service with `cloudflared service install` (`sudo` on Linux and for start-at-boot on macOS). **On Windows** the service runs as SYSTEM, so it doesn't read your user folder: put `config.yml` and the credentials file in `C:\Windows\System32\config\systemprofile\.cloudflared\`, then run `cloudflared.exe service install` from an Administrator PowerShell. The dashboard method above avoids all of this.
|
|
82
|
+
|
|
83
|
+
</details>
|
|
84
|
+
|
|
85
|
+
### Tailscale Funnel (no domain)
|
|
86
|
+
|
|
87
|
+
1. Create a free Tailscale account and install Tailscale on this computer.
|
|
88
|
+
2. Run:
|
|
77
89
|
```
|
|
78
|
-
tailscale funnel 3100
|
|
90
|
+
tailscale funnel --bg 3100
|
|
79
91
|
```
|
|
80
|
-
It prints your
|
|
81
|
-
|
|
92
|
+
The first time, it walks you through turning on HTTPS certificates and Funnel for your tailnet. It prints your address, like `https://my-pc.my-tailnet.ts.net`, and keeps running in the background.
|
|
93
|
+
3. Funnel only serves on ports 443, 8443 and 10000; the command above uses 443, which is what Papercliped needs. Funnel addresses always end in `.ts.net` (no custom domains), and bandwidth is limited, which is fine for Papercliped's small requests.
|
|
82
94
|
|
|
83
|
-
|
|
84
|
-
|
|
95
|
+
Find your address any time with `tailscale funnel status`.
|
|
96
|
+
|
|
97
|
+
### ngrok (no domain)
|
|
98
|
+
|
|
99
|
+
1. Create a free ngrok account. Your account gets one free static address (under **Domains** in the ngrok dashboard), like `your-name.ngrok-free.app`. You can't choose it on the free plan.
|
|
85
100
|
2. Install ngrok and add your authtoken (the dashboard shows the exact command).
|
|
86
|
-
3. Run, with your own
|
|
101
|
+
3. Run, with your own address:
|
|
87
102
|
```
|
|
88
|
-
ngrok http --url=your-name.ngrok-free.
|
|
103
|
+
ngrok http --url=your-name.ngrok-free.app 3100
|
|
89
104
|
```
|
|
90
|
-
4.
|
|
105
|
+
4. On the free plan ngrok shows a "You are about to visit…" page to **web browsers** the first time. Click **Visit Site** when you open Paperclip in your browser; requests from programs like Papercliped aren't affected. If a connection ever fails with an unexpected HTML page, this page is the likely cause.
|
|
106
|
+
|
|
107
|
+
To keep ngrok running after you close the terminal, see ngrok's docs on running it as a service (`ngrok service install`).
|
|
91
108
|
|
|
92
109
|
### Cloudflare quick tunnel (trial only)
|
|
93
|
-
|
|
110
|
+
|
|
111
|
+
No account, no domain. Install `cloudflared`, then:
|
|
112
|
+
|
|
94
113
|
```
|
|
95
114
|
cloudflared tunnel --url http://localhost:3100
|
|
96
115
|
```
|
|
97
|
-
It prints a random `https://something.trycloudflare.com` address. **The address changes every time you restart it**, and when it changes your Papercliped connection stops working until you connect again with the new address. Quick tunnels are for trying Papercliped for an afternoon, not for daily use.
|
|
98
116
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
117
|
+
It prints a random `https://something.trycloudflare.com` address. Use that as the public URL in step 2 (`npx paperclipai configure --section server` if you already onboarded). **The address changes every time you restart it**, and then Papercliped can't reach your Paperclip until you set the new address in Paperclip and connect again. Quick tunnels are for testing only.
|
|
118
|
+
|
|
119
|
+
## 4. Create your account
|
|
120
|
+
|
|
121
|
+
In another terminal on the same computer:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
npx paperclipai auth bootstrap-ceo --base-url https://your-address
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
It prints a one-time invite link. Open it, create your account and your first company. (If you switched an existing Paperclip from `local_trusted`, it may instead print a one-time **claim** link when it starts; either works.)
|
|
128
|
+
|
|
129
|
+
## 5. Check it works
|
|
130
|
+
|
|
131
|
+
From another network (your phone on mobile data is a good test):
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
curl https://your-address/api/health
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
(On Windows PowerShell use `curl.exe`.) You want JSON with `"status":"ok"`, `"deploymentMode":"authenticated"`, `"deploymentExposure":"public"` and `"bootstrapStatus":"ready"`.
|
|
138
|
+
|
|
139
|
+
## 6. Connect Papercliped
|
|
140
|
+
|
|
141
|
+
1. Add the connector in your AI app. In Claude: **Settings → Connectors → Add custom connector**, address `{{MCP}}/mcp`.
|
|
142
|
+
2. Choose **Connect your Paperclip**, enter your public address (just the address, no path) and approve the request in your Paperclip.
|
|
143
|
+
3. Pick a username, save the secret key you're shown once, and choose **Read only** or **Full control**. Every screen: [Create your account](/docs/signup).
|
|
144
|
+
4. Send your first prompt: *"Catch me up on my Paperclip."* More in the [prompt gallery](/docs/prompts).
|
|
145
|
+
|
|
146
|
+
## Keep it running
|
|
147
|
+
|
|
148
|
+
- **Turn off sleep** on this computer, or your agents and connection stop whenever it sleeps.
|
|
149
|
+
- **Start Paperclip with the computer.** The Cloudflare dashboard tunnel and Tailscale already do; for Paperclip itself, add `npx paperclipai run` to your login items (macOS), Task Scheduler (Windows) or a systemd service (Linux), or use the Docker setup, which restarts by itself.
|
|
150
|
+
- **Update Paperclip** with `npx paperclipai@latest run` when your agents are idle.
|
|
103
151
|
|
|
104
152
|
## Keep it safe
|
|
105
|
-
|
|
153
|
+
|
|
154
|
+
- **Expose only Paperclip.** Point the tunnel at port 3100 and nothing else on your computer.
|
|
155
|
+
- **Never expose `local_trusted` mode.** Always `authenticated` + `public`.
|
|
106
156
|
- **Keep Paperclip up to date.**
|
|
107
|
-
- **
|
|
108
|
-
- **You can cut access any time:** revoke the Papercliped key in Paperclip, or disconnect apps in the [Paperclip plugin](/docs/paperclip-plugin).
|
|
109
|
-
- **If the tunnel or your computer is off,** connected apps simply stop working until it's back. Nothing is lost.
|
|
157
|
+
- **You can cut access any time:** disconnect apps in the [Paperclip plugin](/docs/paperclip-plugin), or revoke the key in Paperclip.
|
|
110
158
|
|
|
111
159
|
## Troubleshooting
|
|
112
|
-
|
|
113
|
-
- **"
|
|
114
|
-
- **
|
|
115
|
-
- **"
|
|
116
|
-
- **
|
|
117
|
-
- **Worked yesterday, not today:** the
|
|
118
|
-
|
|
119
|
-
## Not independently confirmed
|
|
120
|
-
These came from vendor docs summarized through search, not read page by page. Check the vendor's current docs before relying on them: Windows service setup for `cloudflared`, Tailscale's current Funnel limits, ngrok's free-plan warning page behavior, and Paperclip's exact setting names for public URL and allowed hostnames.
|
|
160
|
+
|
|
161
|
+
- **"Could not reach your Paperclip":** the tunnel or Paperclip isn't running, a new DNS name hasn't spread yet (give it a few minutes), or the address isn't on port 443. Test with `curl` from another network.
|
|
162
|
+
- **"Private address" errors:** you entered a LAN address, `localhost` or `http://`. Use the public `https://` address from your tunnel.
|
|
163
|
+
- **"This hostname is not allowed for this Paperclip instance":** Paperclip's public URL doesn't match the tunnel address, or exposure is still `private`. Fix it with `npx paperclipai configure --section server` and restart.
|
|
164
|
+
- **A challenge or login page appears:** exempt `/api/*` from Cloudflare Access, Bot Fight Mode, "Under Attack" mode or any managed challenge.
|
|
165
|
+
- **Worked yesterday, not today:** the computer slept, the tunnel stopped, or a quick tunnel's address changed.
|
|
166
|
+
- More: [Troubleshooting](/docs/troubleshooting).
|
package/site/docs/faq.md
CHANGED
|
@@ -12,8 +12,17 @@ Only what it asks for through the tools, within your level. Issue and comment te
|
|
|
12
12
|
## What do you store?
|
|
13
13
|
Your username, a hash of your secret key, your Paperclip's address, an encrypted Paperclip key, connection records and a 30-day activity log. Details in [Privacy](/privacy).
|
|
14
14
|
|
|
15
|
+
## What can I ask it?
|
|
16
|
+
Anything you'd otherwise click through Paperclip for: "Catch me up", "Give the Web Engineer this task", "Approve the hire", "Weekly cost report". Browse ready-to-copy prompts in the [prompt gallery](/docs/prompts).
|
|
17
|
+
|
|
18
|
+
## Where should I host Paperclip?
|
|
19
|
+
At home with a free tunnel to try it; a small VPS (best value) or Railway (easiest) to keep it on all the time. Compare every option in [Host your Paperclip](/docs/hosting).
|
|
20
|
+
|
|
21
|
+
## Paperclip has its own MCP server now. Do I still need Papercliped?
|
|
22
|
+
Newer Paperclip versions include an experimental, off-by-default MCP endpoint for connecting assistants straight to your instance. Use whichever suits you. Papercliped adds a hosted connector that works with older Paperclips too, ChatGPT GPT Actions, the two access levels enforced on every call, an audit log, ready-made status, cost and performance reports, and connection management in the Paperclip plugin.
|
|
23
|
+
|
|
15
24
|
## Can I use it without a public Paperclip?
|
|
16
|
-
Yes: run it locally with `npx papercliped@latest`. The hosted bridge needs a public https address; see [
|
|
25
|
+
Yes: run it locally with `npx papercliped@latest`. The hosted bridge needs a public https address; see [Host your Paperclip](/docs/hosting).
|
|
17
26
|
|
|
18
27
|
## Why does pausing an agent fail with 403?
|
|
19
28
|
Pause, resume, wake and approve need a Paperclip **board** token, and a connection at **Full control**. Check your level in the [Paperclip plugin](/docs/paperclip-plugin).
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Papercliped connects Claude (and ChatGPT) to **your** Paperclip. You keep control: you choose how much the AI may do, and you can cut access at any time.
|
|
4
4
|
|
|
5
5
|
## What you need
|
|
6
|
-
- A Paperclip that is reachable over the internet at an `https://` address (for example `https://workforce.example.com`). Private, local and `http://` addresses are refused on purpose. No public address yet? See [
|
|
6
|
+
- A Paperclip that is reachable over the internet at an `https://` address (for example `https://workforce.example.com`). Private, local and `http://` addresses are refused on purpose. No public address yet? See [Host your Paperclip](/docs/hosting).
|
|
7
7
|
- A Claude account that can add connectors, or Claude Code.
|
|
8
8
|
|
|
9
9
|
## Connect from Claude
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Host Paperclip with Coolify
|
|
2
|
+
|
|
3
|
+
Coolify is a free, open-source control panel you install on your own server. It gives you a Railway-style dashboard (deploys, domains, certificates, logs, a terminal) on a VPS you pay for directly.
|
|
4
|
+
|
|
5
|
+
**You'll end up with:** Coolify on your server, running Paperclip at `https://paperclip.yourdomain.com`, connected to Papercliped.
|
|
6
|
+
|
|
7
|
+
**Time:** about 30 minutes. **Cost:** your server. Coolify itself needs about 2 GB of memory, Paperclip another 2–4 GB, so pick an **8 GB** server (for example Hetzner's 8 GB plans). Self-hosted Coolify is free; Coolify Cloud (they run the panel, you bring the server) is about $5 a month.
|
|
8
|
+
|
|
9
|
+
## 1. Get a server and install Coolify
|
|
10
|
+
|
|
11
|
+
1. Rent an Ubuntu 24.04 server with 8 GB of memory (see the provider table in [VPS with Docker](/docs/host-vps#1-rent-the-server)).
|
|
12
|
+
2. Connect with `ssh root@YOUR_IP` and run Coolify's installer:
|
|
13
|
+
```
|
|
14
|
+
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
|
|
15
|
+
```
|
|
16
|
+
3. Open `http://YOUR_IP:8000` and create your Coolify admin account straight away (the first person to open it becomes the admin).
|
|
17
|
+
|
|
18
|
+
## 2. Point your domain at it
|
|
19
|
+
|
|
20
|
+
At your DNS provider, add an **A record**: `paperclip` → your server's IP (on Cloudflare: **DNS only**, grey cloud).
|
|
21
|
+
|
|
22
|
+
## 3. Create Paperclip
|
|
23
|
+
|
|
24
|
+
1. In Coolify: **Projects → your project → New Resource → Docker Image**.
|
|
25
|
+
2. Image: `ghcr.io/paperclipai/paperclip:latest`.
|
|
26
|
+
3. **Ports Exposes:** `3100`.
|
|
27
|
+
4. **Domains:** `https://paperclip.yourdomain.com`. Coolify gets the certificate for you.
|
|
28
|
+
|
|
29
|
+
## 4. Add storage, health check and settings
|
|
30
|
+
|
|
31
|
+
- **Persistent Storage → Add → Volume:** destination path **`/paperclip`**.
|
|
32
|
+
- **Health check:** path `/api/health`, port `3100`.
|
|
33
|
+
- **Environment Variables:** add
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
PAPERCLIP_DEPLOYMENT_MODE=authenticated
|
|
37
|
+
PAPERCLIP_DEPLOYMENT_EXPOSURE=public
|
|
38
|
+
PAPERCLIP_PUBLIC_URL=https://paperclip.yourdomain.com
|
|
39
|
+
BETTER_AUTH_SECRET=YOUR-FIRST-SECRET
|
|
40
|
+
PAPERCLIP_TOOL_ACTION_SIGNING_SECRET=YOUR-SECOND-SECRET
|
|
41
|
+
ANTHROPIC_API_KEY=
|
|
42
|
+
OPENAI_API_KEY=
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Make each secret with `openssl rand -hex 32` (run it on the server). Then **Deploy**.
|
|
46
|
+
|
|
47
|
+
Prefer Docker Compose? Choose **Docker Compose** as the resource type and paste the Paperclip service from the [VPS guide](/docs/host-vps#5-create-the-docker-compose-file) **without** the `caddy` service: Coolify's own proxy takes Caddy's place.
|
|
48
|
+
|
|
49
|
+
## 5. Create your account
|
|
50
|
+
|
|
51
|
+
Open the resource's **Terminal** tab and run:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
HOME=/paperclip gosu node npx --yes paperclipai auth bootstrap-ceo --data-dir /paperclip --base-url https://paperclip.yourdomain.com
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Open the invite link, create your account and your first company. Optionally add `PAPERCLIP_AUTH_DISABLE_SIGN_UP=true` and redeploy to close public sign-ups. To sign agents in with a subscription, run `HOME=/paperclip gosu node claude` in the same terminal.
|
|
58
|
+
|
|
59
|
+
## 6. Check and connect
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
curl https://paperclip.yourdomain.com/api/health
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
You want `"status":"ok"`, `"deploymentExposure":"public"` and `"bootstrapStatus":"ready"`. Then [connect Papercliped](/docs/hosting#connect-papercliped) and send *"Catch me up on my Paperclip."*
|
|
66
|
+
|
|
67
|
+
## Updates and backups
|
|
68
|
+
|
|
69
|
+
- **Update:** **Redeploy** pulls the newest image (restarts Paperclip, so do it when agents are idle).
|
|
70
|
+
- **Backups:** Coolify can back up its own databases to S3-compatible storage; for Paperclip's volume, use your provider's server snapshots or the `tar` backup from the [VPS guide](/docs/host-vps#backups).
|
|
71
|
+
- Keep Coolify itself updated from its settings page.
|
|
72
|
+
|
|
73
|
+
## Troubleshooting
|
|
74
|
+
|
|
75
|
+
- **No certificate:** the A record isn't pointing at the server yet, or Cloudflare's proxy is on.
|
|
76
|
+
- **"This hostname is not allowed":** `PAPERCLIP_PUBLIC_URL` doesn't match the domain.
|
|
77
|
+
- **Data reset after redeploy:** the volume isn't mounted at exactly `/paperclip`.
|
|
78
|
+
- More: [Troubleshooting](/docs/troubleshooting).
|