papercliped 2.2.1 → 2.4.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 +20 -0
- package/README.md +9 -5
- package/dist/access/guard.js +17 -0
- package/dist/access/policy.js +203 -0
- package/dist/execute.js +25 -1
- package/dist/manage/routes.js +46 -2
- package/dist/mcp.js +6 -5
- package/dist/oauth/pg-store.js +13 -1
- package/dist/oauth/provider.js +50 -1
- package/dist/oauth/store.js +20 -0
- package/dist/public-api/types.js +1 -1
- package/dist/server.js +2 -2
- package/dist/site/markdown.js +26 -5
- package/dist/site/site.js +10 -1
- package/docs/CONTROL-ROOM.md +79 -0
- package/docs/SECURITY.md +1 -1
- package/docs/SITEMAP.md +3 -1
- package/docs/supabase-schema.sql +12 -1
- package/migrations/007_control_room.sql +9 -0
- package/package.json +1 -1
- package/site/docs/access-modes.md +72 -0
- package/site/docs/connect-your-paperclip.md +139 -93
- package/site/docs/control-room.md +61 -0
- package/site/docs/faq.md +16 -1
- package/site/docs/getting-started.md +2 -2
- 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/limits-and-errors.md +1 -0
- package/site/docs/manage-api.md +12 -1
- package/site/docs/paperclip-plugin.md +21 -10
- package/site/docs/permissions.md +8 -0
- package/site/docs/prompts.md +349 -0
- package/site/docs/public-api.md +1 -1
- package/site/docs/signup.md +1 -1
- package/site/docs/tools.md +35 -35
- package/site/docs/troubleshooting.md +11 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Host your Paperclip
|
|
2
|
+
|
|
3
|
+
Papercliped connects your AI app to **your** Paperclip over the internet, so your Paperclip needs a public `https://` address. This section takes you from nothing to a running Paperclip with a public address, connected to Papercliped, with one complete guide per hosting option.
|
|
4
|
+
|
|
5
|
+
Already have Paperclip running at a public `https://` address? Skip to [Connect Papercliped](#connect-papercliped).
|
|
6
|
+
|
|
7
|
+
## Pick where to run it
|
|
8
|
+
|
|
9
|
+
| Option | Cost per month (Oct 2026, approx.) | Effort | Best for | Guide |
|
|
10
|
+
| --- | --- | --- | --- | --- |
|
|
11
|
+
| **Your own computer + a tunnel** | Free (plus a domain, if you want one) | Medium | Trying it out; a computer that's always on | [At home, with a tunnel](/docs/connect-your-paperclip) |
|
|
12
|
+
| **A VPS with Docker** (Hetzner, DigitalOcean, Linode…) | about €5–12 | Medium | Best value for daily use, full control | [VPS with Docker](/docs/host-vps) |
|
|
13
|
+
| **Railway** | about $10–25 (usage-based) | Easy | The fewest steps, no server to look after | [Railway](/docs/host-railway) |
|
|
14
|
+
| **Render** | about $25+ (2 GB plan) plus disk | Easy | A dashboard you already know | [Render](/docs/host-render) |
|
|
15
|
+
| **Fly.io** | about $11–22 plus volume | Medium | Command-line people, pick your region | [Fly.io](/docs/host-fly) |
|
|
16
|
+
| **Coolify** on a VPS | your VPS (8 GB recommended) | Easy–medium | A point-and-click panel on your own server | [Coolify](/docs/host-coolify) |
|
|
17
|
+
|
|
18
|
+
Prices change; check the provider's pricing page before you sign up.
|
|
19
|
+
|
|
20
|
+
**Not recommended:** free tiers that **sleep** (Render free, Railway's free plan) or hosts with **no persistent disk** (DigitalOcean App Platform). Paperclip keeps its database, secrets key, uploads, agent workspaces and agent logins on disk, and a sleeping server stops your agents mid-task. Use a DigitalOcean *Droplet* with the [VPS guide](/docs/host-vps) instead.
|
|
21
|
+
|
|
22
|
+
**Not sure?** Start at home with a tunnel to try everything for free. When you want it running all the time, move to a VPS (cheapest) or Railway (easiest).
|
|
23
|
+
|
|
24
|
+
## What every option needs
|
|
25
|
+
|
|
26
|
+
Every guide sets these up. If you're doing something we don't cover, this is the checklist.
|
|
27
|
+
|
|
28
|
+
1. **Paperclip in authenticated, public mode.** Paperclip has two modes: `local_trusted` (no login, only on your own computer) and `authenticated` (people sign in). An internet-facing Paperclip must be `authenticated` with `public` exposure. Never put a `local_trusted` Paperclip behind a public address.
|
|
29
|
+
2. **Its public address set explicitly.** Paperclip builds sign-in links and checks hostnames from it.
|
|
30
|
+
3. **Two long random secrets.** One for sign-ins, one for signing tool-action approvals.
|
|
31
|
+
4. **A persistent disk** at Paperclip's data folder (`/paperclip` in the Docker image, `~/.paperclip` otherwise).
|
|
32
|
+
5. **At least 2 GB of memory, 4 GB if you run several agents.** Agents run as programs inside the same machine.
|
|
33
|
+
6. **Always on.** A restart or redeploy stops any agent run in progress, so avoid hosts that sleep, and update when your agents are idle.
|
|
34
|
+
7. **Nothing blocking `/api/*`.** No login wall, bot challenge or "under attack" mode in front of Paperclip's API, or Papercliped can't reach it.
|
|
35
|
+
|
|
36
|
+
### The settings
|
|
37
|
+
|
|
38
|
+
| Setting | Value | Why |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| `PAPERCLIP_DEPLOYMENT_MODE` | `authenticated` | People sign in (the Docker image's default) |
|
|
41
|
+
| `PAPERCLIP_DEPLOYMENT_EXPOSURE` | `public` | Internet-facing. The Docker image defaults to `private`, which refuses unknown hostnames |
|
|
42
|
+
| `PAPERCLIP_PUBLIC_URL` | `https://paperclip.example.com` | Your public address, exactly as people will type it |
|
|
43
|
+
| `BETTER_AUTH_SECRET` | 64 random hex characters | Signs sign-in sessions. Required |
|
|
44
|
+
| `PAPERCLIP_TOOL_ACTION_SIGNING_SECRET` | 64 random hex characters | Signs tool-action approvals |
|
|
45
|
+
| `PORT` | `3100` | Paperclip's port (the image's default; some hosts need it set) |
|
|
46
|
+
| `DATABASE_URL` | optional | Leave unset to use Paperclip's built-in Postgres on the disk, or point it at a managed Postgres |
|
|
47
|
+
| `TRUST_PROXY` | optional | Tells Paperclip which proxy in front of it to believe about the visitor's address (`uniquelocal` behind Caddy in Docker). Leave unset if unsure |
|
|
48
|
+
| `ANTHROPIC_API_KEY`, `OPENAI_API_KEY` | optional | Keys for the agents that use Claude Code or Codex. You can sign in inside the server instead (see each guide) |
|
|
49
|
+
|
|
50
|
+
Make a secret with:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
openssl rand -hex 32
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
No `openssl`? Any password manager can generate a 64-character random password; use letters and numbers only.
|
|
57
|
+
|
|
58
|
+
### Your first account
|
|
59
|
+
|
|
60
|
+
In public mode, Paperclip doesn't show a "claim this instance" button (anyone on the internet could press it). Instead you run one command on the server, which prints a **one-time invite link** for the first admin:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
npx --yes paperclipai auth bootstrap-ceo --data-dir /paperclip --base-url https://paperclip.example.com
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Each guide shows exactly where to run it. Open the link, create your account, and you're the admin. Once you have your account, you can close public sign-ups by setting `PAPERCLIP_AUTH_DISABLE_SIGN_UP=true` and restarting; invite teammates from inside Paperclip.
|
|
67
|
+
|
|
68
|
+
### Your agents' keys
|
|
69
|
+
|
|
70
|
+
The official Paperclip image already includes the Claude Code, Codex, OpenCode and Gemini command-line tools, plus git and the GitHub CLI. Your agents need one of:
|
|
71
|
+
|
|
72
|
+
- **An API key** as a setting: `ANTHROPIC_API_KEY` for Claude Code agents, `OPENAI_API_KEY` for Codex agents.
|
|
73
|
+
- **Your subscription login**, done once inside the server (for example `claude` or `codex`, then follow the sign-in). The login is saved on the persistent disk, so it survives restarts.
|
|
74
|
+
|
|
75
|
+
## Check it works
|
|
76
|
+
|
|
77
|
+
From any computer (your phone on mobile data is a good test):
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
curl https://paperclip.example.com/api/health
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
On Windows PowerShell use `curl.exe`. A healthy answer is JSON that includes:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
"status":"ok", "deploymentMode":"authenticated", "deploymentExposure":"public", "bootstrapStatus":"ready"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`"bootstrapStatus":"bootstrap_pending"` means nobody has created the first account yet (see [Your first account](#your-first-account)).
|
|
90
|
+
|
|
91
|
+
## Connect Papercliped
|
|
92
|
+
|
|
93
|
+
1. Add the connector in your AI app. In Claude: **Settings → Connectors → Add custom connector**, address `{{MCP}}/mcp`. Other apps: [Any AI app](/docs/other-ai-apps), [ChatGPT](/docs/chatgpt).
|
|
94
|
+
2. On the Papercliped page choose **Connect your Paperclip** and enter your public address (just `https://paperclip.example.com`, no path).
|
|
95
|
+
3. Approve the request in your Paperclip (you'll be asked to sign in), pick a username, save the secret key you're shown once, and choose **Read only** or **Full control**. Details: [Create your account](/docs/signup).
|
|
96
|
+
4. Leave **Also install the Papercliped plugin** ticked to manage your connections from inside Paperclip ([Paperclip plugin](/docs/paperclip-plugin)).
|
|
97
|
+
5. Send your first prompt: *"Catch me up on my Paperclip."* Then try more from the [prompt gallery](/docs/prompts).
|
|
98
|
+
|
|
99
|
+
## Keep it safe
|
|
100
|
+
|
|
101
|
+
- Use long random secrets and keep them out of chats, screenshots and Git.
|
|
102
|
+
- Keep Paperclip up to date, and update when agents are idle.
|
|
103
|
+
- Back up the data disk (each guide says how).
|
|
104
|
+
- Expose only Paperclip, nothing else on the machine.
|
|
105
|
+
- You can cut Papercliped's access at any time: disconnect apps in the [Paperclip plugin](/docs/paperclip-plugin), or revoke the key in Paperclip.
|
|
@@ -21,6 +21,7 @@ Tool errors come back to your AI app with a message it can read. Over HTTP (Chat
|
|
|
21
21
|
| --- | --- | --- | --- |
|
|
22
22
|
| `400` | `invalid_input` | The request didn't match the tool's inputs | Usually the AI retries with fixed input |
|
|
23
23
|
| `403` | `insufficient_scope` | The connection's level is too low for this tool | Switch the app to Full control in the [Paperclip plugin](/docs/paperclip-plugin) |
|
|
24
|
+
| `403` | `policy_blocked` | Your settings don't allow this call: the access switch, an agent's setting, or the session's tool or agent list. The error carries a `policy` code (see [API only, Full or Agent only](/docs/access-modes)) | Change the setting in the [control room](/docs/control-room) if you want it allowed |
|
|
24
25
|
| `403` | `read_only` | The bridge runs with `PAPERCLIP_READ_ONLY` | Ask the operator |
|
|
25
26
|
| `401`, `403`, `404`, `409`… | `upstream_4xx` | Paperclip refused (e.g. your Paperclip key was revoked: reconnect) | Check the message |
|
|
26
27
|
| `5xx` | `upstream_5xx` | Paperclip had an error | Try again later |
|
package/site/docs/manage-api.md
CHANGED
|
@@ -14,7 +14,14 @@ The token has no scopes: it can't call MCP, Actions or any Paperclip tool. It la
|
|
|
14
14
|
| --- | --- |
|
|
15
15
|
| `POST /plugin-link/sign-in` | Link: username + secret key → plugin token |
|
|
16
16
|
| `GET /me` | Name, anonymity, connected Paperclip |
|
|
17
|
-
| `GET /connections` | Connected apps with level and last use |
|
|
17
|
+
| `GET /connections` | Connected apps with level and last use (also `GET /sessions`, which is the same list under the name the control room uses) |
|
|
18
|
+
| `GET /sessions` | Sessions: each with `label`, `level`, `tools` (or `null` for all) and `agents` (or `null` for everyone) |
|
|
19
|
+
| `POST /sessions/:id` `{ "label", "tools", "agents", "level" }` | Change one session. Leave a field out to keep it; `null` clears a limit. Takes effect on the next request |
|
|
20
|
+
| `DELETE /sessions/:id` | Disconnect a session |
|
|
21
|
+
| `GET /policy` | The access switch and per-agent settings: `{ "mode": "api" \| "full" \| "agent", "agents": { "<agent id>": "api" \| "full" \| "agent" \| "off" } }` |
|
|
22
|
+
| `POST /policy` (or `PUT`) | Replace them with the same shape |
|
|
23
|
+
| `GET /tools` | Every tool with its `access` and its `surface` (`read`, `agent` or `api`) |
|
|
24
|
+
| `GET /activity?session=:id&limit=:n` | The newest tool calls (names and outcomes only), up to 200 |
|
|
18
25
|
| `POST /connections/:id` `{ "level": "read" \| "control" }` | Change an app's level |
|
|
19
26
|
| `DELETE /connections/:id` | Disconnect an app |
|
|
20
27
|
| `POST /privacy` `{ "anonymous": true }` | Turn anonymity on or off |
|
|
@@ -26,6 +33,10 @@ The token has no scopes: it can't call MCP, Actions or any Paperclip tool. It la
|
|
|
26
33
|
|
|
27
34
|
The last three need your secret key in the request.
|
|
28
35
|
|
|
36
|
+
A session's `tools` must be known tool names and `agents` agent ids; an empty list is refused (use `null` for "all"). Per-agent settings equal to the default are dropped. See [API only, Full or Agent only](/docs/access-modes).
|
|
37
|
+
|
|
38
|
+
The activity list holds, for each call: `at`, `tool`, `ok`, `blocked`, `status`, `error` (a coarse class such as `policy_blocked`), `ms`, `session` and `app`. It never holds what was sent to a tool or what came back.
|
|
39
|
+
|
|
29
40
|
## Errors
|
|
30
41
|
`400` bad input, `401` wrong username or key when linking, or the token is unknown, expired or revoked, `403` wrong secret key for a sensitive action, `404` no such connection or link (also for other people's), `429` too many requests.
|
|
31
42
|
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
# Paperclip plugin
|
|
2
2
|
|
|
3
|
-
The Papercliped plugin
|
|
3
|
+
The Papercliped plugin puts Papercliped inside Paperclip. It adds the [control room](/docs/control-room): a **Papercliped** entry in the sidebar that opens a page where you see every connected AI app, choose what each may do and which agents it applies to, set [API only, Full or Agent only](/docs/access-modes) for every agent or one at a time, read what was used and what was blocked, and look after your account. It also adds a **Papercliped** tab on every agent's page and a widget for the dashboard.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The plugin manages your Papercliped account and the limits on AI apps. It reads your agents' names, roles and status to list them, and never changes anything in Paperclip. AI apps still connect through Papercliped as before.
|
|
6
6
|
|
|
7
7
|
## Install (Paperclip admin)
|
|
8
8
|
**Automatic (recommended).** When you connect your Paperclip from an AI app, the address step has a box, ticked by default: **Also install the Papercliped plugin in my Paperclip**. After you approve the sign-in, Papercliped asks your Paperclip to install it using Paperclip's own installer and your own approved key. It installs one fixed package, `papercliped-paperclip-plugin`, at the exact version that matches the service, and only when you are the Paperclip's instance admin. If you are not an admin, if it is already installed, or if your Paperclip can't install plugins, nothing happens and your connection works as usual. Untick the box to skip it.
|
|
9
9
|
|
|
10
10
|
**By hand.** Install the npm package `papercliped-paperclip-plugin` from **Settings → Plugins** in Paperclip (instance admin only). You can remove it there at any time, whichever way it was installed.
|
|
11
11
|
|
|
12
|
-
The plugin asks for these capabilities: store its own data, make outbound web requests (to Papercliped), and add a sidebar entry and a
|
|
12
|
+
The plugin asks for these capabilities: store its own data, make outbound web requests (to Papercliped), read agents (to list them), and add a sidebar entry, a page with its own menu, an agent tab and a dashboard widget.
|
|
13
|
+
|
|
14
|
+
**Updating from an earlier version.** Paperclip won't update a plugin to a version that asks for new permissions without an admin's approval, so go to **Settings → Plugins**, remove Papercliped, and install it again (or connect your Paperclip again with the install box ticked). You may need to link your account again; your Papercliped account, sessions and settings are kept at Papercliped and are not affected.
|
|
13
15
|
|
|
14
16
|
The bridge address defaults to `https://papercliped.co`. If you host your own bridge, change **Papercliped bridge URL** in the plugin's settings. It must be `https`.
|
|
15
17
|
|
|
@@ -22,13 +24,22 @@ Papercliped checks the key once and hands the plugin a link token. The key itsel
|
|
|
22
24
|
Lost your secret key? Connect from your AI app again and choose **Connect your Paperclip**: you keep your account and get a new key.
|
|
23
25
|
|
|
24
26
|
## What you can do
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
The [control room](/docs/control-room) has six sections:
|
|
28
|
+
|
|
29
|
+
- **Overview:** the access switch (API only, Full, Agent only), your numbers, and what needs a look.
|
|
30
|
+
- **Sessions:** every connected app. Name it, set its level, choose its tools and which agents it applies to, see its recent calls, or disconnect it. It applies on the app's next request.
|
|
31
|
+
- **Agents:** what Papercliped may do with each agent, including turning one off.
|
|
32
|
+
- **Tools:** every tool, by what it does and what your settings allow.
|
|
33
|
+
- **Activity:** recent calls, including the ones that were blocked.
|
|
34
|
+
- **Settings:**
|
|
35
|
+
- **Privacy:** appear anonymously in the service's logs, or switch back.
|
|
36
|
+
- **Linked Paperclips:** see every Paperclip linked to your account, unlink this one, or remove an old one.
|
|
37
|
+
- **Account** (asks for your secret key again):
|
|
38
|
+
- **Make a new secret key.** Shown once. The old key stops working and other linked Paperclips have to link again; this one stays linked.
|
|
39
|
+
- **Disconnect my Paperclip.** Papercliped forgets your Paperclip key and asks your Paperclip to revoke it. Every app stops working and the plugin unlinks. Your account stays.
|
|
40
|
+
- **Delete my account.** Removes your username, stored key and every connection. Type your username to confirm.
|
|
41
|
+
|
|
42
|
+
Outside the control room: the **Papercliped tab** on an agent's page sets what AI apps may do with that one agent, and the **dashboard widget** shows the access switch in small.
|
|
32
43
|
|
|
33
44
|
## Good to know
|
|
34
45
|
- The plugin runs as trusted code inside Paperclip, so install it only from the official package. The automatic install is limited to that one package and to the version that matches the service, and it is always your choice on the connect screen.
|
package/site/docs/permissions.md
CHANGED
|
@@ -7,6 +7,14 @@ You decide how much the AI may do each time you connect. There are two levels.
|
|
|
7
7
|
| **Read only** (default) | View agents, tasks, goals, costs and reports. Cannot change anything. |
|
|
8
8
|
| **Full control** | Every tool: everything above, plus pause, resume, wake or terminate agents, create and update issues and goals, comment, decide approvals, change budgets and send any API request. Run your Paperclip from anywhere, without opening the dashboard. |
|
|
9
9
|
|
|
10
|
+
## Beyond the two levels
|
|
11
|
+
The level is chosen when an app connects. After that, the [control room](/docs/control-room) gives you finer control, without reconnecting anything:
|
|
12
|
+
|
|
13
|
+
- **An access switch** for every agent: [API only, Full or Agent only](/docs/access-modes), and any agent can be set differently or turned off.
|
|
14
|
+
- **Per-session limits:** name a session, choose exactly which tools it may use, and choose whether it applies to everyone or only selected agents.
|
|
15
|
+
|
|
16
|
+
These only ever narrow what a level allows; they never grant more than the level.
|
|
17
|
+
|
|
10
18
|
## Good to know
|
|
11
19
|
- Papercliped enforces these levels itself on every call, and refuses anything outside the level you chose.
|
|
12
20
|
- Your Paperclip key has the access your Paperclip account has. The levels limit what the **AI app** can do through Papercliped; they do not shrink the key itself. That is why the key is stored encrypted and why you can revoke it at any time.
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
# Prompt gallery
|
|
2
|
+
|
|
3
|
+
Papercliped lets you run your Paperclip by talking to your AI app, so you don't have to click through the dashboard to make a task, wake an agent or answer an approval. Copy a prompt, replace the parts in [brackets], and send it. Your AI app picks the right tools.
|
|
4
|
+
|
|
5
|
+
Each prompt says the level it needs. **Read only** prompts only look; **Full control** prompts change something, and your AI app asks before anything that can't be undone. Browse and copy them on [papercliped.co/prompts]({{URL}}/prompts).
|
|
6
|
+
|
|
7
|
+
## Tips
|
|
8
|
+
|
|
9
|
+
- **Use names, not ids.** Say "the Web Engineer" or "the onboarding issue"; your AI app looks up the ids.
|
|
10
|
+
- **More than one company?** Start with "Use [company name] for this chat."
|
|
11
|
+
- **Ask for a preview.** Add "show me before you create anything" to any prompt that makes several changes.
|
|
12
|
+
- **Chain steps.** "Wake X, wait until they finish, then summarise" works in one message.
|
|
13
|
+
- **Not sure what's possible?** Ask "What can you do with my Paperclip?"
|
|
14
|
+
|
|
15
|
+
## Start your day
|
|
16
|
+
|
|
17
|
+
Get the whole picture in one message instead of clicking through the dashboard.
|
|
18
|
+
|
|
19
|
+
### Morning catch-up
|
|
20
|
+
|
|
21
|
+
> Catch me up on my Paperclip: what each agent is doing right now, anything blocked or in error, and approvals waiting on me.
|
|
22
|
+
|
|
23
|
+
Read only · `paperclip_sync_snapshot`, `paperclip_list_approvals`
|
|
24
|
+
|
|
25
|
+
### What changed overnight
|
|
26
|
+
|
|
27
|
+
> What happened in my Paperclip since yesterday evening? Group it by agent and skip the routine heartbeats.
|
|
28
|
+
|
|
29
|
+
Read only · `paperclip_report_activity`
|
|
30
|
+
|
|
31
|
+
### Needs my attention
|
|
32
|
+
|
|
33
|
+
> Is anything in my Paperclip waiting on me? Approvals, agents in error, blocked issues, budgets close to the limit.
|
|
34
|
+
|
|
35
|
+
Read only · `paperclip_report_status`
|
|
36
|
+
|
|
37
|
+
### Which company
|
|
38
|
+
|
|
39
|
+
> Which Paperclip companies can you see? Use [company name] for the rest of this chat.
|
|
40
|
+
|
|
41
|
+
Read only · `paperclip_list_companies`
|
|
42
|
+
|
|
43
|
+
## Hand out work
|
|
44
|
+
|
|
45
|
+
Create, assign and move issues by describing them. Assigning an issue to an agent with status todo is how you give it work.
|
|
46
|
+
|
|
47
|
+
### Give an agent a task
|
|
48
|
+
|
|
49
|
+
> Create an issue "[title]" for [agent name]: [what you want done, and what done looks like]. Set it to todo so they pick it up.
|
|
50
|
+
|
|
51
|
+
Full control · `paperclip_list_agents`, `paperclip_create_issue`
|
|
52
|
+
|
|
53
|
+
### Turn notes into issues
|
|
54
|
+
|
|
55
|
+
> Here are my notes from today's call. Turn each action item into an issue in [project name], assign each to the agent whose role fits best, and show me the list before creating them.
|
|
56
|
+
>
|
|
57
|
+
> [paste your notes]
|
|
58
|
+
|
|
59
|
+
Full control · `paperclip_list_projects`, `paperclip_list_agents`, `paperclip_create_issue`
|
|
60
|
+
|
|
61
|
+
### What's open
|
|
62
|
+
|
|
63
|
+
> List the open issues in [project name] by priority, with who's on each one.
|
|
64
|
+
|
|
65
|
+
Read only · `paperclip_list_projects`, `paperclip_list_issues`
|
|
66
|
+
|
|
67
|
+
### Explain an issue
|
|
68
|
+
|
|
69
|
+
> Explain issue [issue number or title]: what it's for, which goal it serves, the plan, and where it's stuck.
|
|
70
|
+
|
|
71
|
+
Read only · `paperclip_get_issue`
|
|
72
|
+
|
|
73
|
+
### Reassign
|
|
74
|
+
|
|
75
|
+
> Move every todo issue from [agent A] to [agent B] and add a comment on each saying why: [reason].
|
|
76
|
+
|
|
77
|
+
Full control · `paperclip_list_issues`, `paperclip_update_issue`
|
|
78
|
+
|
|
79
|
+
### Unblock with a comment
|
|
80
|
+
|
|
81
|
+
> On [issue], add a comment for the assignee: [your answer or decision]. Then set it back to in progress.
|
|
82
|
+
|
|
83
|
+
Full control · `paperclip_comment_issue`, `paperclip_update_issue`
|
|
84
|
+
|
|
85
|
+
### Bump priority
|
|
86
|
+
|
|
87
|
+
> Make [issue] urgent and tell the assignee in a comment that it now comes before everything else.
|
|
88
|
+
|
|
89
|
+
Full control · `paperclip_update_issue`
|
|
90
|
+
|
|
91
|
+
### Close what's done
|
|
92
|
+
|
|
93
|
+
> Find issues in review that the assignee says are finished, show them to me, and mark the ones I confirm as done.
|
|
94
|
+
|
|
95
|
+
Full control · `paperclip_list_issues`, `paperclip_update_issue`
|
|
96
|
+
|
|
97
|
+
## Run your agents
|
|
98
|
+
|
|
99
|
+
Check on agents, wake them, pause them and get them out of error.
|
|
100
|
+
|
|
101
|
+
### Who's doing what
|
|
102
|
+
|
|
103
|
+
> List my agents with their status, role, and what each one is working on.
|
|
104
|
+
|
|
105
|
+
Read only · `paperclip_list_agents`
|
|
106
|
+
|
|
107
|
+
### Org chart
|
|
108
|
+
|
|
109
|
+
> Show me my org chart: who reports to whom.
|
|
110
|
+
|
|
111
|
+
Read only · `paperclip_org_chart`
|
|
112
|
+
|
|
113
|
+
### Wake an agent
|
|
114
|
+
|
|
115
|
+
> Wake [agent name] so they start on their queue now.
|
|
116
|
+
|
|
117
|
+
Full control · `paperclip_wake_agent`
|
|
118
|
+
|
|
119
|
+
### Pause for now
|
|
120
|
+
|
|
121
|
+
> Pause [agent name] until I say otherwise.
|
|
122
|
+
|
|
123
|
+
Full control · `paperclip_pause_agent`
|
|
124
|
+
|
|
125
|
+
### Resume everyone
|
|
126
|
+
|
|
127
|
+
> Resume every paused agent except [agent name].
|
|
128
|
+
|
|
129
|
+
Full control · `paperclip_list_agents`, `paperclip_resume_agent`
|
|
130
|
+
|
|
131
|
+
### Fix agents in error
|
|
132
|
+
|
|
133
|
+
> Which agents are in error, and what was the last thing each was doing? Clear the error on the ones I pick and wake them again.
|
|
134
|
+
|
|
135
|
+
Full control · `paperclip_list_agents`, `paperclip_get_agent`, `paperclip_clear_agent_error`, `paperclip_wake_agent`
|
|
136
|
+
|
|
137
|
+
### One agent, in detail
|
|
138
|
+
|
|
139
|
+
> Tell me everything about [agent name]: status, manager, budget, spend this month and current task.
|
|
140
|
+
|
|
141
|
+
Read only · `paperclip_get_agent`
|
|
142
|
+
|
|
143
|
+
### Let an agent go
|
|
144
|
+
|
|
145
|
+
> I want to retire [agent name]. Reassign their open issues to [other agent], then terminate them. Ask me before the terminate step.
|
|
146
|
+
|
|
147
|
+
Full control · `paperclip_list_issues`, `paperclip_update_issue`, `paperclip_terminate_agent`
|
|
148
|
+
|
|
149
|
+
Terminating can't be undone. Your AI app asks first; pausing is the reversible option.
|
|
150
|
+
|
|
151
|
+
## Follow along
|
|
152
|
+
|
|
153
|
+
Start something and let your AI app watch it to the end.
|
|
154
|
+
|
|
155
|
+
### Wake and wait
|
|
156
|
+
|
|
157
|
+
> Wake [agent name], wait until they finish their run, then tell me what they did.
|
|
158
|
+
|
|
159
|
+
Full control · `paperclip_wake_agent`, `paperclip_wait_for_agent`, `paperclip_report_activity`
|
|
160
|
+
|
|
161
|
+
### Hand off and watch
|
|
162
|
+
|
|
163
|
+
> Give [agent name] this task: [task]. Wake them, follow the run to the end, and summarise the result and any comments they left.
|
|
164
|
+
|
|
165
|
+
Full control · `paperclip_create_issue`, `paperclip_wake_agent`, `paperclip_wait_for_agent`, `paperclip_get_issue`
|
|
166
|
+
|
|
167
|
+
### Keep me posted
|
|
168
|
+
|
|
169
|
+
> Check what changed in my Paperclip since you last looked and tell me only what's new.
|
|
170
|
+
|
|
171
|
+
Read only · `paperclip_sync_changes`
|
|
172
|
+
|
|
173
|
+
## Approvals
|
|
174
|
+
|
|
175
|
+
Hires, plans and budget overrides waiting on you.
|
|
176
|
+
|
|
177
|
+
### What's waiting
|
|
178
|
+
|
|
179
|
+
> List pending approvals with who asked, what for, and what it would cost.
|
|
180
|
+
|
|
181
|
+
Read only · `paperclip_list_approvals`
|
|
182
|
+
|
|
183
|
+
### Approve a hire
|
|
184
|
+
|
|
185
|
+
> Approve [agent]'s request to hire a [role].
|
|
186
|
+
|
|
187
|
+
Full control · `paperclip_list_approvals`, `paperclip_decide_approval`
|
|
188
|
+
|
|
189
|
+
### Ask for changes
|
|
190
|
+
|
|
191
|
+
> Send the [plan or request] back for revision with this note: [what to change].
|
|
192
|
+
|
|
193
|
+
Full control · `paperclip_list_approvals`, `paperclip_decide_approval`
|
|
194
|
+
|
|
195
|
+
### Review them one by one
|
|
196
|
+
|
|
197
|
+
> Go through each pending approval with me one at a time: summarise it, give me your recommendation, and wait for my decision before moving on.
|
|
198
|
+
|
|
199
|
+
Full control · `paperclip_list_approvals`, `paperclip_decide_approval`
|
|
200
|
+
|
|
201
|
+
## Goals and projects
|
|
202
|
+
|
|
203
|
+
Keep the plan up to date in plain words.
|
|
204
|
+
|
|
205
|
+
### Goal tree
|
|
206
|
+
|
|
207
|
+
> Show my goals as a tree, with status, and which ones have no open issues behind them.
|
|
208
|
+
|
|
209
|
+
Read only · `paperclip_list_goals`, `paperclip_list_issues`
|
|
210
|
+
|
|
211
|
+
### New goal
|
|
212
|
+
|
|
213
|
+
> Create a company goal: "[goal]". Then suggest three team goals under it and create the ones I approve.
|
|
214
|
+
|
|
215
|
+
Full control · `paperclip_list_goals`, `paperclip_create_goal`
|
|
216
|
+
|
|
217
|
+
### Mark achieved
|
|
218
|
+
|
|
219
|
+
> Mark the goal "[goal]" as achieved.
|
|
220
|
+
|
|
221
|
+
Full control · `paperclip_list_goals`, `paperclip_update_goal`
|
|
222
|
+
|
|
223
|
+
### Projects overview
|
|
224
|
+
|
|
225
|
+
> List my projects and, for each, how many issues are open, in progress and done.
|
|
226
|
+
|
|
227
|
+
Read only · `paperclip_list_projects`, `paperclip_list_issues`
|
|
228
|
+
|
|
229
|
+
## Budgets and costs
|
|
230
|
+
|
|
231
|
+
See where the money goes and set limits. Agents pause themselves at 100% of their budget.
|
|
232
|
+
|
|
233
|
+
### Spend this month
|
|
234
|
+
|
|
235
|
+
> How much have my agents spent this month, against budget, per agent and per project?
|
|
236
|
+
|
|
237
|
+
Read only · `paperclip_report_costs`
|
|
238
|
+
|
|
239
|
+
### Close to the limit
|
|
240
|
+
|
|
241
|
+
> Which agents are above 80% of their monthly budget?
|
|
242
|
+
|
|
243
|
+
Read only · `paperclip_list_agents`
|
|
244
|
+
|
|
245
|
+
### Set a budget
|
|
246
|
+
|
|
247
|
+
> Set [agent name]'s monthly budget to $[amount].
|
|
248
|
+
|
|
249
|
+
Full control · `paperclip_set_agent_budget`
|
|
250
|
+
|
|
251
|
+
### Pause the overspender
|
|
252
|
+
|
|
253
|
+
> Pause any agent that's over budget and tell me what each one was working on.
|
|
254
|
+
|
|
255
|
+
Full control · `paperclip_list_agents`, `paperclip_pause_agent`
|
|
256
|
+
|
|
257
|
+
### Value for money
|
|
258
|
+
|
|
259
|
+
> Which agents give me the most finished work per dollar, and which the least?
|
|
260
|
+
|
|
261
|
+
Read only · `paperclip_report_agent_performance`
|
|
262
|
+
|
|
263
|
+
## Reports
|
|
264
|
+
|
|
265
|
+
Ready-made reports you can paste into a doc, email or chat.
|
|
266
|
+
|
|
267
|
+
### Executive summary
|
|
268
|
+
|
|
269
|
+
> Write a short executive summary of my Paperclip: what got done, what's stuck, spend, and decisions I need to make.
|
|
270
|
+
|
|
271
|
+
Read only · `paperclip_report_status`
|
|
272
|
+
|
|
273
|
+
### Weekly review
|
|
274
|
+
|
|
275
|
+
> Weekly report: issues closed and blocked per agent, spend against last week, and the three things I should look at.
|
|
276
|
+
|
|
277
|
+
Read only · `paperclip_report_agent_performance`, `paperclip_report_costs`, `paperclip_report_activity`
|
|
278
|
+
|
|
279
|
+
### Activity log
|
|
280
|
+
|
|
281
|
+
> Give me today's activity as a timeline.
|
|
282
|
+
|
|
283
|
+
Read only · `paperclip_report_activity`
|
|
284
|
+
|
|
285
|
+
### Team table
|
|
286
|
+
|
|
287
|
+
> Make a table of every agent: role, status, issues done this month, spend, and cost per finished issue.
|
|
288
|
+
|
|
289
|
+
Read only · `paperclip_report_agent_performance`
|
|
290
|
+
|
|
291
|
+
## Recipes
|
|
292
|
+
|
|
293
|
+
Longer prompts that chain several steps. Copy, adjust the names, send.
|
|
294
|
+
|
|
295
|
+
### Daily stand-up
|
|
296
|
+
|
|
297
|
+
> Run a stand-up for my Paperclip: for each agent, what they finished since yesterday, what they're on now, and what's blocking them. Then list approvals waiting on me and anything over budget. End with the three decisions I should make today.
|
|
298
|
+
|
|
299
|
+
Read only · `paperclip_sync_snapshot`, `paperclip_report_activity`, `paperclip_list_approvals`, `paperclip_report_costs`
|
|
300
|
+
|
|
301
|
+
### Kick off a project
|
|
302
|
+
|
|
303
|
+
> I'm starting "[project]". Create a goal for it, break it into 5 to 8 issues, assign each to the best-fit agent as todo, and wake the agents who got work. Show me the plan before you create anything.
|
|
304
|
+
|
|
305
|
+
Full control · `paperclip_list_agents`, `paperclip_create_goal`, `paperclip_create_issue`, `paperclip_wake_agent`
|
|
306
|
+
|
|
307
|
+
### End-of-week tidy
|
|
308
|
+
|
|
309
|
+
> Tidy up my Paperclip for the week: close issues that are finished, comment on anything stuck for more than 3 days asking the assignee what they need, and give me a cost summary.
|
|
310
|
+
|
|
311
|
+
Full control · `paperclip_list_issues`, `paperclip_update_issue`, `paperclip_comment_issue`, `paperclip_report_costs`
|
|
312
|
+
|
|
313
|
+
### Cost clamp
|
|
314
|
+
|
|
315
|
+
> Keep this month under $[amount]: show the current spend and forecast, suggest new budgets per agent, and set the ones I approve.
|
|
316
|
+
|
|
317
|
+
Full control · `paperclip_report_costs`, `paperclip_list_agents`, `paperclip_set_agent_budget`
|
|
318
|
+
|
|
319
|
+
### Incident mode
|
|
320
|
+
|
|
321
|
+
> Something's wrong. Pause every agent except [agent name], list what each paused agent was doing, and tell me what changed in the last hour.
|
|
322
|
+
|
|
323
|
+
Full control · `paperclip_list_agents`, `paperclip_pause_agent`, `paperclip_report_activity`
|
|
324
|
+
|
|
325
|
+
## Anything else
|
|
326
|
+
|
|
327
|
+
For Paperclip features without a dedicated tool, and for checking the connection.
|
|
328
|
+
|
|
329
|
+
### Use any Paperclip feature
|
|
330
|
+
|
|
331
|
+
> List the routines in my company. (There's no dedicated tool, so use the Paperclip API.)
|
|
332
|
+
|
|
333
|
+
Full control · `paperclip_api_request`
|
|
334
|
+
|
|
335
|
+
Reading needs Read only. Anything that changes data needs Full control and your confirmation.
|
|
336
|
+
|
|
337
|
+
### Is Papercliped up?
|
|
338
|
+
|
|
339
|
+
> Is the Papercliped service working right now?
|
|
340
|
+
|
|
341
|
+
Read only · `papercliped_service_status`
|
|
342
|
+
|
|
343
|
+
### What can you do?
|
|
344
|
+
|
|
345
|
+
> What can you do with my Paperclip at my current access level? Give me five examples.
|
|
346
|
+
|
|
347
|
+
Read only · `paperclip_list_companies`
|
|
348
|
+
|
|
349
|
+
Got a prompt that works well? Share it in [the community]({{URL}}/community) or open a pull request that adds it to `web/src/content/prompts.json`. Every tool is listed in the [tool reference](/docs/tools).
|
package/site/docs/public-api.md
CHANGED
|
@@ -47,7 +47,7 @@ curl "{{URL}}/api/public/v1/stats?window=24h"
|
|
|
47
47
|
|
|
48
48
|
**Sign-in failure reasons** (a fixed list): `bad_credentials`, `rate_limited`, `denied`, `expired`, `unreachable`, `invalid_instance`, `too_many_attempts`, `other`.
|
|
49
49
|
|
|
50
|
-
**Error classes** (a fixed list): `invalid_input`, `insufficient_scope`, `read_only`, `upstream_4xx`, `upstream_5xx`, `upstream_unreachable`, `rate_limited`, `unauthorized`, `internal`, `other`. Anything the service records outside these lists is counted as `other`, never shown as text.
|
|
50
|
+
**Error classes** (a fixed list): `invalid_input`, `insufficient_scope`, `read_only`, `policy_blocked`, `upstream_4xx`, `upstream_5xx`, `upstream_unreachable`, `rate_limited`, `unauthorized`, `internal`, `other`. Anything the service records outside these lists is counted as `other`, never shown as text.
|
|
51
51
|
|
|
52
52
|
## Series
|
|
53
53
|
Each bucket has `t` (start time), `requests`, `errors`, `faults`, `p95Ms`, `authCompleted`, `authFailed` and `newUsers`. Every bucket in the window is present, with zeros when nothing happened.
|
package/site/docs/signup.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Creating a Papercliped account takes about a minute. You do it the first time you connect Claude (or ChatGPT).
|
|
4
4
|
|
|
5
5
|
## Before you start
|
|
6
|
-
- Your Paperclip must be reachable at a public `https://` address, for example `https://workforce.example.com`. Need one? Follow [
|
|
6
|
+
- Your Paperclip must be reachable at a public `https://` address, for example `https://workforce.example.com`. Need one? Follow [Host your Paperclip](/docs/hosting): at home with a tunnel, on a VPS, or on Railway, Render, Fly.io or Coolify.
|
|
7
7
|
- You must be able to sign in to that Paperclip, because you approve the connection there.
|
|
8
8
|
|
|
9
9
|
## Steps
|