133 lines
2.9 KiB
Markdown
133 lines
2.9 KiB
Markdown
---
|
|
title: Local Development
|
|
summary: Set up Paperclip for local development
|
|
---
|
|
|
|
Run Paperclip locally with zero external dependencies.
|
|
|
|
## Prerequisites
|
|
|
|
- Node.js 24.11+
|
|
- pnpm 9+
|
|
|
|
## Start Dev Server
|
|
|
|
```sh
|
|
pnpm install
|
|
pnpm dev
|
|
```
|
|
|
|
This starts:
|
|
|
|
- **API server** at `http://localhost:3100`
|
|
- **UI** served by the API server in dev middleware mode (same origin)
|
|
|
|
No Docker or external database required. Paperclip uses embedded PostgreSQL automatically.
|
|
|
|
## One-Command Bootstrap
|
|
|
|
For a first-time install:
|
|
|
|
```sh
|
|
pnpm paperclipai run
|
|
```
|
|
|
|
This does:
|
|
|
|
1. Auto-onboards if config is missing
|
|
2. Runs `paperclipai doctor` with repair enabled
|
|
3. Starts the server when checks pass
|
|
|
|
## Bind Presets In Dev
|
|
|
|
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
|
|
pnpm dev --authenticated-private
|
|
```
|
|
|
|
Allow additional private hostnames:
|
|
|
|
```sh
|
|
npx paperclipai allowed-hostname dotta-macbook-pro
|
|
```
|
|
|
|
For full setup and troubleshooting, see [Tailscale Private Access](/deploy/tailscale-private-access).
|
|
|
|
## Health Checks
|
|
|
|
```sh
|
|
curl http://localhost:3100/api/health
|
|
# -> {"status":"ok"}
|
|
|
|
curl http://localhost:3100/api/companies
|
|
# -> []
|
|
```
|
|
|
|
## Safe Worktree Bootstrap for Local Agent Runs
|
|
|
|
For safer parallel local experiments, initialize a dedicated worktree instance instead of reusing your main checkout:
|
|
|
|
```sh
|
|
npx paperclipai worktree:make local-lab --seed-mode minimal
|
|
cd ~/paperclip-local-lab
|
|
pnpm paperclipai worktree env # inspect generated env exports
|
|
eval "$(npx paperclipai worktree env)" # bash/zsh
|
|
pnpm paperclipai run
|
|
pnpm paperclipai doctor
|
|
```
|
|
|
|
If the experiment gets noisy, repair or reseed the worktree without touching the main branch:
|
|
|
|
```sh
|
|
# worktree repair rebuilds the local checkout metadata, so run the checked-out CLI through the direct-exec form.
|
|
node cli/node_modules/tsx/dist/cli.mjs cli/src/index.ts worktree repair --branch paperclip-local-lab
|
|
npx paperclipai worktree reseed --from . --to paperclip-local-lab
|
|
```
|
|
|
|
When done, shut it down and remove the isolated state explicitly:
|
|
|
|
```sh
|
|
npx paperclipai worktree:cleanup local-lab --force
|
|
```
|
|
|
|
## Reset Dev Data
|
|
|
|
To wipe local data and start fresh:
|
|
|
|
```sh
|
|
rm -rf ~/.paperclip/instances/default/db
|
|
pnpm dev
|
|
```
|
|
|
|
## Data Locations
|
|
|
|
| Data | Path |
|
|
|------|------|
|
|
| Config | `~/.paperclip/instances/default/config.json` |
|
|
| Database | `~/.paperclip/instances/default/db` |
|
|
| Storage | `~/.paperclip/instances/default/data/storage` |
|
|
| Secrets key | `~/.paperclip/instances/default/secrets/master.key` |
|
|
| Logs | `~/.paperclip/instances/default/logs` |
|
|
|
|
Override with environment variables:
|
|
|
|
```sh
|
|
PAPERCLIP_HOME=/custom/path PAPERCLIP_INSTANCE_ID=dev pnpm paperclipai run
|
|
```
|