mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-11 13:24:55 +01:00
Merge remote-tracking branch 'public-gh/master' into PAP-989-multi-user-implementation-using-plan-from-pap-958
* public-gh/master: (32 commits) fix(dev-runner): tighten worktree env bootstrap fix(inbox): avoid refetching on filter-only changes fix(codex-local): avoid fast mode in env probe fix: isolate dev runner worktree env Broaden comment matches in issue search Add inbox issue search fallback feat(codex-local): add fast mode support Harden tailnet bind setup Fix dev runner workspace import regression Introduce bind presets for deployment setup fix: address PR 3355 review regressions test(ui): fix heartbeat run fixture drift fix: restore inbox optimistic run fixture fix: keep thread polish independent of quicklook routing fix: keep runtime UI changes self-contained fix: keep inbox quicklook and tests standalone fix: use CLI tsx entrypoint for workspace preflight chore: improve worktree tooling and security docs feat: polish issue thread markdown and references fix: harden heartbeat and adapter runtime workflows ... # Conflicts: # cli/src/__tests__/worktree.test.ts # scripts/ensure-workspace-package-links.ts # server/src/__tests__/claude-local-execute.test.ts # server/src/__tests__/issues-service.test.ts # ui/src/components/Layout.tsx
This commit is contained in:
commit
e6fd9d29db
219 files changed
+24351
-2690
No files matched your search
@@ -20,6 +20,7 @@ The `codex_local` adapter runs OpenAI's Codex CLI locally. It supports session p
|
||||
| `env` | object | No | Environment variables (supports secret refs) |
|
||||
| `timeoutSec` | number | No | Process timeout (0 = no timeout) |
|
||||
| `graceSec` | number | No | Grace period before force-kill |
|
||||
| `fastMode` | boolean | No | Enables Codex Fast mode. Currently supported on `gpt-5.4` only and burns credits faster |
|
||||
| `dangerouslyBypassApprovalsAndSandbox` | boolean | No | Skip safety checks (dev only) |
|
||||
|
||||
## Session Persistence
|
||||
@@ -30,8 +31,22 @@ Codex uses `previous_response_id` for session continuity. The adapter serializes
|
||||
|
||||
The adapter symlinks Paperclip skills into the global Codex skills directory (`~/.codex/skills`). Existing user skills are not overwritten.
|
||||
|
||||
## Fast Mode
|
||||
|
||||
When `fastMode` is enabled, Paperclip adds Codex config overrides equivalent to:
|
||||
|
||||
```sh
|
||||
-c 'service_tier="fast"' -c 'features.fast_mode=true'
|
||||
```
|
||||
|
||||
Paperclip currently applies that only when the selected model is `gpt-5.4`. On other models, the toggle is preserved in config but ignored at execution time to avoid unsupported runs.
|
||||
|
||||
## Managed `CODEX_HOME`
|
||||
|
||||
When Paperclip is running inside a managed worktree instance (`PAPERCLIP_IN_WORKTREE=true`), the adapter instead uses a worktree-isolated `CODEX_HOME` under the Paperclip instance so Codex skills, sessions, logs, and other runtime state do not leak across checkouts. It seeds that isolated home from the user's main Codex home for shared auth/config continuity.
|
||||
|
||||
## Manual Local CLI
|
||||
|
||||
For manual local CLI usage outside heartbeat runs (for example running as `codexcoder` directly), use:
|
||||
|
||||
```sh
|
||||
|
||||
@@ -89,6 +89,8 @@ Show resolved environment configuration:
|
||||
pnpm paperclipai env
|
||||
```
|
||||
|
||||
This now includes bind-oriented deployment settings such as `PAPERCLIP_BIND` and `PAPERCLIP_BIND_HOST` when configured.
|
||||
|
||||
## `paperclipai allowed-hostname`
|
||||
|
||||
Allow a private hostname for authenticated/private mode:
|
||||
|
||||
@@ -3,13 +3,14 @@ title: Deployment Modes
|
||||
summary: local_trusted vs authenticated (private/public)
|
||||
---
|
||||
|
||||
Paperclip supports two runtime modes with different security profiles.
|
||||
Paperclip supports two runtime modes with different security profiles. Reachability is configured separately with `bind`.
|
||||
|
||||
## `local_trusted`
|
||||
|
||||
The default mode. Optimized for single-operator local use.
|
||||
|
||||
- **Host binding**: loopback only (localhost)
|
||||
- **Bind**: `loopback`
|
||||
- **Authentication**: no login required
|
||||
- **Use case**: local development, solo experimentation
|
||||
- **Board identity**: auto-created local board user
|
||||
@@ -31,6 +32,7 @@ For private network access (Tailscale, VPN, LAN).
|
||||
- **Authentication**: login required via Better Auth
|
||||
- **URL handling**: auto base URL mode (lower friction)
|
||||
- **Host trust**: private-host trust policy required
|
||||
- **Bind**: choose `loopback`, `lan`, `tailnet`, or `custom`
|
||||
|
||||
```sh
|
||||
pnpm paperclipai onboard
|
||||
@@ -50,6 +52,7 @@ For internet-facing deployment.
|
||||
- **Authentication**: login required
|
||||
- **URL**: explicit public URL required
|
||||
- **Security**: stricter deployment checks in doctor
|
||||
- **Bind**: usually `loopback` behind a reverse proxy; `lan/custom` is advanced
|
||||
|
||||
```sh
|
||||
pnpm paperclipai onboard
|
||||
@@ -81,5 +84,5 @@ pnpm paperclipai configure --section server
|
||||
Runtime override via environment variable:
|
||||
|
||||
```sh
|
||||
PAPERCLIP_DEPLOYMENT_MODE=authenticated pnpm paperclipai run
|
||||
PAPERCLIP_DEPLOYMENT_MODE=authenticated PAPERCLIP_BIND=lan pnpm paperclipai run
|
||||
```
|
||||
@@ -10,11 +10,14 @@ All environment variables that Paperclip uses for server configuration.
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `PORT` | `3100` | Server port |
|
||||
| `HOST` | `127.0.0.1` | Server host binding |
|
||||
| `PAPERCLIP_BIND` | `loopback` | Reachability preset: `loopback`, `lan`, `tailnet`, or `custom` |
|
||||
| `PAPERCLIP_BIND_HOST` | (unset) | Required when `PAPERCLIP_BIND=custom` |
|
||||
| `HOST` | `127.0.0.1` | Legacy host override; prefer `PAPERCLIP_BIND` for new setups |
|
||||
| `DATABASE_URL` | (embedded) | PostgreSQL connection string |
|
||||
| `PAPERCLIP_HOME` | `~/.paperclip` | Base directory for all Paperclip data |
|
||||
| `PAPERCLIP_INSTANCE_ID` | `default` | Instance identifier (for multiple local instances) |
|
||||
| `PAPERCLIP_DEPLOYMENT_MODE` | `local_trusted` | Runtime mode override |
|
||||
| `PAPERCLIP_DEPLOYMENT_EXPOSURE` | `private` | Exposure policy when deployment mode is `authenticated` |
|
||||
|
||||
## Secrets
|
||||
|
||||
|
||||
@@ -38,19 +38,26 @@ This does:
|
||||
2. Runs `paperclipai doctor` with repair enabled
|
||||
3. Starts the server when checks pass
|
||||
|
||||
## Tailscale/Private Auth Dev Mode
|
||||
## Bind Presets In Dev
|
||||
|
||||
To run in `authenticated/private` mode for network access:
|
||||
Default `pnpm dev` stays in `local_trusted` with loopback-only binding.
|
||||
|
||||
To open Paperclip to a private network with login enabled:
|
||||
|
||||
```sh
|
||||
pnpm dev --bind lan
|
||||
```
|
||||
|
||||
For Tailscale-only binding on a detected tailnet address:
|
||||
|
||||
```sh
|
||||
pnpm dev --bind tailnet
|
||||
```
|
||||
|
||||
Legacy aliases still work and map to the older broad private-network behavior:
|
||||
|
||||
```sh
|
||||
pnpm dev --tailscale-auth
|
||||
```
|
||||
|
||||
This binds the server to `0.0.0.0` for private-network access.
|
||||
|
||||
Alias:
|
||||
|
||||
```sh
|
||||
pnpm dev --authenticated-private
|
||||
```
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Tailscale Private Access
|
||||
summary: Run Paperclip with Tailscale-friendly host binding and connect from other devices
|
||||
summary: Run Paperclip with Tailscale-friendly bind presets and connect from other devices
|
||||
---
|
||||
|
||||
Use this when you want to access Paperclip over Tailscale (or a private LAN/VPN) instead of only `localhost`.
|
||||
@@ -8,20 +8,25 @@ Use this when you want to access Paperclip over Tailscale (or a private LAN/VPN)
|
||||
## 1. Start Paperclip in private authenticated mode
|
||||
|
||||
```sh
|
||||
pnpm dev --tailscale-auth
|
||||
pnpm dev --bind tailnet
|
||||
```
|
||||
|
||||
This configures:
|
||||
Recommended behavior:
|
||||
|
||||
- `PAPERCLIP_DEPLOYMENT_MODE=authenticated`
|
||||
- `PAPERCLIP_DEPLOYMENT_EXPOSURE=private`
|
||||
- `PAPERCLIP_AUTH_BASE_URL_MODE=auto`
|
||||
- `HOST=0.0.0.0` (bind on all interfaces)
|
||||
- `PAPERCLIP_BIND=tailnet`
|
||||
|
||||
Equivalent flag:
|
||||
If you want the old broad private-network behavior instead, use:
|
||||
|
||||
```sh
|
||||
pnpm dev --bind lan
|
||||
```
|
||||
|
||||
Legacy aliases still map to `authenticated/private + bind=lan`:
|
||||
|
||||
pnpm dev --authenticated-private
|
||||
pnpm dev --tailscale-auth
|
||||
```
|
||||
|
||||
## 2. Find your reachable Tailscale address
|
||||
@@ -73,5 +78,5 @@ Expected result:
|
||||
## Troubleshooting
|
||||
|
||||
- Login or redirect errors on a private hostname: add it with `paperclipai allowed-hostname`.
|
||||
- App only works on `localhost`: make sure you started with `--tailscale-auth` (or set `HOST=0.0.0.0` in private mode).
|
||||
- App only works on `localhost`: make sure you started with `--bind lan` or `--bind tailnet` instead of plain `pnpm dev`.
|
||||
- Can connect locally but not remotely: verify both devices are on the same Tailscale network and port `3100` is reachable.
|
||||
Reference in new issue
Block a user