Files
2535f6c99c Release docs for paperclip v2026.1012.0 (#149)
## Summary

Release docs for Paperclip **v2026.1012.0** (parent tag commit
`bba6a45f`).

- **Window:** `v2026.1005.0` → `v2026.1012.0`. That is 132 commits and
1,242 files, with no compare truncation.
- **Branch:** cut from `nightly` (`fe556e1`). Nightly had drafted
against parent master up to `abbd8800`. The release was cut from master
at `22a3ea3` (Oct 6), so nightly's last 39 commits are post-tag.
- **Review:** every changed page was checked by hand against a checkout
of the tag. The tag-accuracy gate was then re-run on the result.

**Headline doc changes:**
- **New pages:**
- [Assistant connections
(MCP)](docs/experimental/assistant-connections.md), with the [Assistant
MCP API](docs/reference/api/assistant-mcp.md) and [`paperclipai
mcp`](docs/reference/cli/mcp.md) references
- [Saved connection
instructions](docs/connectors/connection-instructions.md)
  - [Check AI account usage](docs/connectors/ai-usage.md)
- [Task-pinned AI routing](docs/experimental/task-pinned-ai-routing.md)
  - [Neon](docs/connectors/neon.md)
- **Breaking changes documented:**
- Restore locks moved to SQLite (#14869). [Update
Paperclip](docs/how-to/update-paperclip.md) now has a "stop everything
first" upgrade and rollback flow.
- Stored tool grants are enforced as written (#14915). This is covered
in the [Tool Gateway API](docs/reference/api/tool-gateway.md) and the
[Access model](docs/connectors/access-model.md).
- **Other release coverage:**
- The connection-instructions contract for HTTP and process adapters
(`connectionInstructions`, `PAPERCLIP_CONNECTION_INSTRUCTIONS_FILE`).
- Much shorter default instructions, and default config grants for new
agents.
  - The `update_skill` tool.
  - Aggregator accounts gathered into one catalog.
  - Chat-first navigation and the combined inbox.
  - The rebuilt New task dialog.
  - "Model at capacity" and "Model unavailable".
  - Sonnet 5.5, GPT-6.1 Sol and new harness pins.
- The supported remote Codex range, and Codex resuming after a server
restart.
  - Watchdog thresholds of 5 and 15 minutes.
  - `tool_discovery_busy`.
  - The Docker provider pack.
- A changelog entry, and 75 pages stamped `paperclip_version:
v2026.1012.0`.

### ⚠ Post-tag leaks removed

These document parent `master` features that are **not in
v2026.1012.0**. They stay on `nightly` for the next release.

- **Pages removed (7):**
  - `administration/agent-commentary.md` (b508a05c)
  - `guides/org/agent-identity.md` (a590ab76)
  - `reference/cli/runtime.md` (a6306ba6)
  - `connectors/custom-model-providers.md` (9f7057e1)
  - `connectors/enterpret.md` (88ff98b8)
  - `connectors/superagent.md` (8cbd21b3)
  - `connectors/telem.md` (f77fcbf4)

Their nav entries and catalog rows are already removed, and no page
links to them.
- **Reverted to `main`:**
- `roles-and-permissions.md`, `administration/company.md` and
`add-a-human-teammate.md`. Operator's 14 default keys come from
582911ba.
- The costs guide and `api/costs.md`. Durable accounting, by-user costs
and per-account quota come from 799e4d55, eab93fd4 and 892b0b36.
  - `adapters/cursor-local.md` (a6306ba6)
- `deploy/database.md` and `deploy/environment-variables.md`, which
carried agent identity and complaints.
  - `browser-use-cloud.md`
  - `back-up-and-restore-a-company.md`
- **Sections trimmed:**
- The assistant MCP pages now match the tag:
`paperclip:read`/`paperclip:write`/`offline_access` only, 10 direct
tools, and no file transfer (2d0c1381, 99a9de99).
- Server-host sign-in for Anthropic, OpenAI and xAI is back to the
terminal-command flow (e38d6d16, 2ca0d26a).
  - OpenRouter is OpenCode-only again (9f7057e1).
  - Requested vs granted OAuth scopes are removed (ea8e6861).
  - PR review waits are removed (228f0e28).
- Historical-question reminders and "No project" in the composer are
removed (faa8e452, ee3c728b).
  - Plugin lifecycle hooks are removed (1cebdd4c).
  - Cursor on the Runner is removed (a6306ba6).
  - The aggregator "Waiting for sign-in" status is removed.
  - Source links pinned to post-tag commits now point at the tag commit.

### ⚠ Drift

Checked against the tag:
- **High:** the `operator` default grants were **real** drift. Fixed by
reverting the post-tag tables.
- **High:** the agent-identity paths and env vars were real at nightly
but are post-tag. They're removed (see above).
- **High:** `PAPERCLIP_WORKSPACE_GIT_SCAN_*`,
`PAPERCLIP_WORKSPACE_GIT_SNAPSHOT_TIMEOUT_MS`, `PAPERCLIP_RUNNER_API_*`
and `PAPERCLIP_CLOUD_CONNECTOR_*` are known false positives. They are
read through helpers the checker doesn't scan.
- **High:** `PAPERCLIP_ID_CONNECTOR_*` is documented as retired, which
is intentional.
- Verify: the `/accounting/*`, `costs/by-user` and
`agents/{id}/identity` routes are no longer documented, because they're
post-tag.
- Verify: `agent-avatars`, `companies/import/transfers*` and
`chats/{agentRef}` are known param/constant-registration false
positives.

### ⚠ Verification Failures / review notes

- **`reference/cli/mcp.md`:** the gate flags `--device` and `--url`.
This is a false positive: both are `requiredOption`s in
`cli/src/commands/mcp.ts` at the tag.
- **New pages the gate can't auto-confirm:** each was verified by hand
at the tag. They are assistant-connections, task-pinned-ai-routing,
ai-usage and connection-instructions.
- **`neon.md`:** says "open **Connectors**", following the Supabase
guide. The parent's notes call the screen "Apps → Browse".
- **`connection-intents.md`:** the AgentMail card details ("shares the
key with every person in the company", "resumes after reload") are only
partly confirmed.
- **`task-chat.md`:** the queued-message details came from an earlier
nightly and couldn't be traced to a specific commit.
- **Upstream inconsistency:** the Codex adapter's in-code doc string
(`codex-local/src/index.ts:181`) contradicts the code about the bypass
flag. Our docs follow the code.

### Screenshots

**126 of 350 screenshots are stale** across 26 routes (see
`SCREENSHOTS_PENDING.md`). None were recaptured in this PR.

### Other open PRs

- **#143** (Browser Use Cloud + Neon, targets `main`): both are now
covered here. Suggest closing it.
- **#140** (Enterpret, targets `main`): Enterpret is post-tag
(88ff98b8). Suggest retargeting it to `nightly` or closing it.

## Checks

- [x] `npm run docs:build`
- [x] `npm run docs:test` (all suites)
- [x] `sync:lint-links` and `sync:verify-nav`. The only orphans are the
7 pages above plus 4 intentional ones.
- [x] `check-tag-accuracy` re-run. The only remaining flags are the ones
explained above.
- [x] Removed the 7 post-tag pages listed above (`cbece5b`), plus fixes
from a second, independent verification pass
- [ ] After the squash-merge, run `node scripts/sync/realign-nightly.mjs
release/v2026.1012.0 --push`, then flip `nightly`'s `.sync-state.json`
back to `branch_mode: nightly`.
- [ ] Confirm the `docs/v2026.1012.0` tag and that docs.paperclip.ing
serves the new changelog entry.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
Co-authored-by: Dotta <[email protected]>
Co-authored-by: ClaudeCoder <[email protected]>
2026-10-13 13:45:13 +02:00

6.5 KiB

paperclip_version, seo_title, seo_description
paperclip_version seo_title seo_description
v2026.1012.0 HTTP Webhook Adapter Send a JSON webhook to a service you control. Use it when the runtime is remote, long-lived, or already exposed as an API rather than a local CLI.

HTTP

The http adapter sends a JSON webhook request to a service you control. Use it when the runtime is remote, long-lived, or already exposed as an API instead of a local command.

Info: http is a built-in internal adapter used by Paperclip's runtime. It's currently shown as "Coming soon" in the agent-config adapter-type dropdown and can't be selected manually. To target it today, configure the agent via the API or an imported company export.


When To Use

  • The agent runs in the cloud or behind another service.
  • You want Paperclip to trigger a webhook and let the remote service do the rest.
  • The runtime already expects a JSON body and returns a simple success or failure response.

When Not To Use

  • The runtime is just a local script or command. Use Process.
  • You need session persistence or built-in CLI behavior. Use one of the local adapters instead.
  • You need Paperclip to parse a rich stdout transcript from the remote runtime.

Common Fields

Field Required Notes
url yes Absolute http:// or https:// endpoint.
method no HTTP method to use. Defaults to POST.
headers no Extra request headers.
payloadTemplate no JSON object merged into the request body before the standard Paperclip fields are added.
timeoutMs no Request timeout in milliseconds. 0 means no timeout.

Note: The HTTP adapter does not run a child process. It sends a single request, waits for the response, and treats any non-2xx response as a failure.


Request Body

Paperclip sends a JSON payload that always includes:

Any payloadTemplate fields are merged in first, then Paperclip adds the standard fields above. If a key collides, the standard Paperclip field wins.

Example body shape:

{
  "runId": "run-123",
  "agentId": "agent-123",
  "context": {
    "taskId": "issue-123",
    "wakeReason": "scheduled",
    "commentId": null
  },
  "customField": "value"
}

Your service can use PAPERCLIP_API_URL and a Paperclip API key to call back into the control plane after it finishes.


Connection instructions

A connection can carry usage instructions for agents — for example, how to use a memory provider like Honcho or Mem0. When any of the agent's authorized connections have instructions turned on, Paperclip delivers them to your service so the model actually sees them.

They arrive as a top-level connectionInstructions field in the request body:

  • an object { "text": "...", "digest": "..." } when instructions apply, or
  • null when none do.
{
  "runId": "run-123",
  "agentId": "agent-123",
  "context": { "taskId": "issue-123" },
  "connectionInstructions": {
    "text": "## Connection instructions\n\n...",
    "digest": "3f2a..."
  }
}

text is ready-to-use Markdown. Append it to the prompt you send your model — don't pass the whole object through. digest is a SHA-256 hex hash of text, handy if you want to cache or detect when the instructions change between turns.

Like the other standard fields, connectionInstructions overrides any key of the same name in payloadTemplate. See Saved connection instructions for how people write and edit them.


Private vs public endpoints

Every request the HTTP adapter sends is checked at the socket boundary before it connects, so you can't accidentally point a webhook at something inside your own network. Public origins are allowed by default. Origins that resolve to private, reserved, or loopback addresses — including localhost, 10.0.0.0/8, 192.168.0.0/16, and friends — are rejected. Link-local metadata endpoints (like a cloud provider's 169.254.x.x) are always blocked and can't be opted back in.

The check also pins the DNS result: the address the guard approves is the address the socket dials. That closes the door on a hostname that resolves to a public address during the check and a private one a moment later.

If your runtime genuinely lives on a private origin — an internal service, a webhook on your own subnet — you opt it in explicitly with the PAPERCLIP_HTTP_ADAPTER_PRIVATE_ENDPOINT_ALLOWLIST environment variable on the Paperclip host. It's a comma-separated list of exact origins, where an origin is the scheme, host, and port together (for example http://hooks.internal.example:8080). Matching is case-insensitive, and each entry must:

  • use http or https,
  • carry no path beyond /,
  • include no userinfo, query string, or fragment.

Anything that doesn't parse as a clean origin is ignored rather than loosely matched, so a typo silently drops out of the allowlist instead of opening more than you meant. An origin only reaches private networking when it matches an allowlist entry exactly — a different port or scheme is a different origin. See the environment variables reference for the full entry.


Environment Test

The Test Environment button checks:

  • The URL is present and uses http or https.
  • The configured method is valid.
  • The endpoint responds to a quick HEAD probe when reachable.

If the probe fails in a private network, that can still be acceptable — the important part is whether the runtime can actually receive the production request. Note that a private origin also has to be on the allowlist described in Private vs public endpoints, or the production request is rejected before it connects regardless of what the probe reported.


Example

{
  "adapterType": "http",
  "adapterConfig": {
    "url": "https://agent.example.com/paperclip/heartbeat",
    "method": "POST",
    "headers": {
      "Authorization": "Bearer <shared-secret>"
    },
    "payloadTemplate": {
      "source": "paperclip"
    },
    "timeoutMs": 10000
  }
}

Practical Notes

  • Use a shared secret or header-based auth on the remote service.
  • Keep the endpoint idempotent when possible because retries are easier to support.
  • Return a 2xx response when the webhook was accepted, not when all follow-up work is complete.

Next Steps