Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
534aee6
Add cursor_cloud adapter for Cursor SDK + Cloud Agents API v1 (#5664)
devinfoley May 11, 2026
6e4fa78
chore(lockfile): refresh pnpm-lock.yaml (#5668)
github-actions[bot] May 11, 2026
b24c690
Harden remote sandbox runtime probes, timeouts, and installs (#5685)
devinfoley May 11, 2026
0fe39a2
fix(cursor-local): resolve sandbox agent installs from cursor bin (#5…
devinfoley May 11, 2026
c0c58d6
fix(ui): prevent lossy cron rewrites + redesign routine triggers tab …
aronprins May 11, 2026
4ad1c83
Write release changelog for v2026.511.0 (#5366)
cryppadotta May 11, 2026
486fb88
Add Cloudflare sandbox provider plugin (#5687)
devinfoley May 11, 2026
74cb560
fix(ui): improve routine properties panel and history UX (#5703)
aronprins May 11, 2026
5a64cf5
Add exe.dev sandbox provider plugin (#5688)
devinfoley May 11, 2026
21404e8
[codex] Fix Docker build without LLM wiki plugin package (#5714)
cryppadotta May 11, 2026
0c6f9bd
Revert "fix(ui): improve routine properties panel and history UX" (#5…
cryppadotta May 11, 2026
8af38fb
Revert "fix(ui): prevent lossy cron rewrites + redesign routine trigg…
cryppadotta May 11, 2026
eaa80cf
Enable CI publishing for cursor-cloud, cloudflare, and exe.dev releas…
devinfoley May 11, 2026
ad0bb57
Fix exe.dev sandbox installs for gemini/opencode local adapters (#5737)
devinfoley May 11, 2026
508355b
[codex] Add LLM Wiki plugin package to master (#5716)
cryppadotta May 12, 2026
94ce7af
chore(lockfile): refresh pnpm-lock.yaml (#5756)
github-actions[bot] May 12, 2026
563413e
Fix LLM wiki type contracts (#5758)
cryppadotta May 12, 2026
9746dab
Bump release changelog to v2026.512.0 (#5764)
cryppadotta May 12, 2026
c445e59
fix(ui): fix message attribution for agent-posted comments with user …
devinfoley May 12, 2026
0808b38
[codex] Add source-scoped recovery actions (#5599)
cryppadotta May 12, 2026
b947a7d
[codex] Improve local plugin development workflow (#5821)
cryppadotta May 12, 2026
eb452fb
Fix comment date binding regression (#5919)
cryppadotta May 13, 2026
012a738
Add ordered sub-issue navigation (#5938)
cryppadotta May 13, 2026
d1a8c87
fix(remote-sandbox): harden host workspace resumes (#5922)
cryppadotta May 13, 2026
4142559
[codex] Add blocked inbox attention view (#5603)
cryppadotta May 13, 2026
f4bed4a
Release changelog v2026.513.0 (#5944)
cryppadotta May 13, 2026
1bd44c8
Harden Cloudflare sandbox execution (#5967)
devinfoley May 14, 2026
333a16b
Fix company export with missing run logs (#5960)
cryppadotta May 14, 2026
901c088
fix: propagate projectId into wakeup context and support identifier l…
devinfoley May 15, 2026
03ad5c5
[codex] Add issue document locking (#6009)
cryppadotta May 15, 2026
dfcebf0
[codex] Refresh issue documents from live updates (#6005)
cryppadotta May 15, 2026
eb38b22
Fix LLM Wiki package and migration validation (#6010)
cryppadotta May 15, 2026
d5ba334
[codex] Add UI i18n runtime packages (#6058)
cryppadotta May 15, 2026
7e1a27c
chore(lockfile): refresh pnpm-lock.yaml (#6062)
github-actions[bot] May 15, 2026
afb73ba
Scale issue kanban board for high-volume columns (#5309)
eibrahim May 15, 2026
e2d7263
[codex] Add minimal i18next i18n foundation (#5943)
cryppadotta May 15, 2026
4c47eb4
[codex] Add multilingual issue preservation coverage (#6069)
cryppadotta May 15, 2026
63821bf
[codex] Add full locale catalog (#6070)
cryppadotta May 16, 2026
ab8b471
Add built-in grok_local adapter (#6087)
devinfoley May 16, 2026
9b6d2e6
chore(lockfile): refresh pnpm-lock.yaml (#6136)
github-actions[bot] May 16, 2026
81d18f2
ci: speed up PR verify workflow (#6137)
devinfoley May 16, 2026
573e9ec
fix(grok-local): restore turn boundaries in streaming reasoning text …
devinfoley May 16, 2026
93cd933
docs: add v2026.517.0 release changelog (#6150)
cryppadotta May 17, 2026
7bbdfb6
[codex] Enable Grok adapter canary publishing (#6154)
cryppadotta May 17, 2026
3e6610f
docs(skills): add release-changelog-discord-message skill (#6152)
cryppadotta May 17, 2026
705c1b8
[codex] Add routine env secrets support (#6212)
cryppadotta May 17, 2026
d734bd4
[codex] Roll up May 17 branch changes (#6210)
cryppadotta May 17, 2026
7343851
Fix new secret form textarea overflow (PAPA-348) (#6222)
devinfoley May 18, 2026
242a2c2
fix(cli): stop worktree init --force from wiping repo worktrees/ (#6240)
devinfoley May 18, 2026
5071c4c
[codex] Add workspace diff viewer plugin (#6071)
cryppadotta May 18, 2026
85510f0
chore(lockfile): refresh pnpm-lock.yaml (#6263)
github-actions[bot] May 18, 2026
32605b7
Remove planning badge from inbox issue rows (PAP-9691) (#6269)
cryppadotta May 18, 2026
8f45d12
docs: update plugin authoring guide for managed resources (#6261)
cryppadotta May 18, 2026
4b1e92a
feat(plugins): add Modal sandbox provider plugin (#6245)
devinfoley May 18, 2026
e5a0f5d
fix(plugin): raise environmentProbe RPC timeout to 120s for cold-star…
devinfoley May 18, 2026
9886899
fix(release): publish modal plugin from ci (#6290)
devinfoley May 18, 2026
a07e6ce
[codex] Fix new issue autocomplete pointer selection (#6311)
cryppadotta May 18, 2026
f343bae
fix(ci): copy link-plugin-dev-sdk.mjs into Docker deps stage (#6338)
devinfoley May 19, 2026
c0c5a82
feat(ui): wire SecretBindingPicker into JsonSchemaForm secret-ref fie…
devinfoley May 19, 2026
24748de
fix(ui): hide sandbox-provider plugins from Instance Settings sidebar…
devinfoley May 19, 2026
bfe6369
Guard cheap recovery model usage (#6371)
cryppadotta May 19, 2026
9c29394
[codex] Allow cloud tenant import mutations without browser origin (#…
cryppadotta May 19, 2026
d67347b
[codex] Provider vault secrets UX (#6381)
cryppadotta May 19, 2026
43c5bb8
[codex] Workspace diff polish (#6383)
cryppadotta May 19, 2026
f257530
[codex] UI and dev ops quality-of-life (#6384)
cryppadotta May 19, 2026
c91a062
[codex] Runtime control-plane fixes (#6380)
cryppadotta May 20, 2026
38c185f
[codex] Add agent permissions and controls plan (#6386)
cryppadotta May 22, 2026
a1835cf
[codex] Harden plugin runtime invocation scope (#6547)
cryppadotta May 22, 2026
e43b392
[codex] Add local Cloud Upstream sync (#6548)
cryppadotta May 22, 2026
ad6effa
[codex] Improve runtime and import reliability (#6549)
cryppadotta May 22, 2026
9011782
[codex] Polish board UI mobile flows (#6550)
cryppadotta May 22, 2026
4811d8d
Fix wrapped company issue prefix conflicts (#6423)
aronprins May 22, 2026
e85ff09
fix(ui): invite page goes blank from companies query-key collision (#…
aronprins May 22, 2026
e3c875c
fix(sandbox): prevent E2B workspace upload + lease idle failures (PAP…
devinfoley May 22, 2026
897cc32
Improve external agent invite flow (#6183)
aronprins May 23, 2026
96f0279
Make ACPX-Claude adapter work seamlessly (PAPA-388) (#6590)
devinfoley May 23, 2026
ece8a51
[codex] Bundle local branch fixes from PAP-10032 (#6604)
cryppadotta May 25, 2026
60efa38
docs: add v2026.525.0 release changelog (#6667)
cryppadotta May 25, 2026
9aea3e3
[codex] Add resource membership controls (#6677)
cryppadotta May 25, 2026
f0ddd24
[codex] Show bundled plugins in plugin manager (#6734)
cryppadotta May 26, 2026
b754582
[codex] Add document annotations and comments (#6733)
cryppadotta May 26, 2026
a49afe5
docs: update README license to Paperclip Labs, Inc (PAPA-437) (#6804)
devinfoley May 27, 2026
de36743
docs(readme): align README with brand guidelines (PAPA-439) (#6810)
devinfoley May 28, 2026
8da50db
[codex] Add private browser first-admin claim flow (#6755)
cryppadotta May 28, 2026
9eac727
[codex] Add skills CLI and catalog management (#6782)
cryppadotta May 28, 2026
d9f9157
Add accepted-plan decomposition exact-once guards and UI state (#6831)
devinfoley May 29, 2026
524e18b
ci: use runner Chrome for headless workflows (#6967)
devinfoley May 29, 2026
1f70fd9
PAPA-430: workspace finalize gates + no-remote-git enforcement (#6969)
devinfoley May 29, 2026
5153b01
[codex] Add Claude model refresh (#6953)
cryppadotta May 29, 2026
8014445
Add v2026.529.0 release changelog (#6999)
cryppadotta May 29, 2026
aea35fe
exe.dev config UX: advanced-options disclosure, form-default fix, SSH…
devinfoley May 30, 2026
900554a
fix: stale workspace/session reuse after agent cwd migration
im0xMagnus May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
406 changes: 406 additions & 0 deletions .agents/skills/release-changelog-discord-message/SKILL.md

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ jobs:

- run: pnpm install --frozen-lockfile
- run: pnpm build
- run: npx playwright install --with-deps chromium
- run: google-chrome --version

- name: Run e2e tests
env:
PAPERCLIP_PLAYWRIGHT_CHANNEL: "chrome"
run: pnpm run test:e2e

- uses: actions/upload-artifact@v4
Expand Down
100 changes: 94 additions & 6 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ jobs:
- name: Validate Dockerfile deps stage
run: node ./scripts/check-docker-deps-stage.mjs

- name: Reject git push in adapter/runtime code
run: node ./scripts/check-no-git-push.mjs

- name: Test no-git-push check
run: node --test ./scripts/check-no-git-push.test.mjs

- name: Validate release package manifest
run: node ./scripts/release-package-map.mjs check

Expand All @@ -62,7 +68,8 @@ jobs:
pnpm install --lockfile-only --ignore-scripts --no-frozen-lockfile
fi

verify:
typecheck_release_registry:
name: Typecheck + Release Registry
needs: [policy]
runs-on: ubuntu-latest
timeout-minutes: 20
Expand All @@ -88,12 +95,89 @@ jobs:
- name: Typecheck workspaces whose build scripts skip TypeScript
run: pnpm run typecheck:build-gaps

- name: Run general test suites
run: pnpm test:run:general

- name: Verify release registry test coverage
run: pnpm run test:release-registry

general_tests:
name: General tests (${{ matrix.group_label }})
needs: [policy]
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
include:
- group: general-server
group_label: server
- group: general-workspaces-a
group_label: workspaces-a
- group: general-workspaces-b
group_label: workspaces-b

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9.15.4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run grouped general test suites
run: pnpm test:run:general -- --group '${{ matrix.group }}'

verify:
# Preserve the legacy required-check name while the underlying work runs in parallel.
name: verify
if: ${{ always() }}
needs: [typecheck_release_registry, general_tests, build]
runs-on: ubuntu-latest
timeout-minutes: 5

steps:
- name: Fail if any split verify lane failed
env:
TYPECHECK_RELEASE_REGISTRY_RESULT: ${{ needs.typecheck_release_registry.result }}
GENERAL_TESTS_RESULT: ${{ needs.general_tests.result }}
BUILD_RESULT: ${{ needs.build.result }}
run: |
test "$TYPECHECK_RELEASE_REGISTRY_RESULT" = "success"
test "$GENERAL_TESTS_RESULT" = "success"
test "$BUILD_RESULT" = "success"

build:
name: Build
needs: [policy]
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9.15.4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build
run: pnpm build

Expand Down Expand Up @@ -195,8 +279,11 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Install Playwright
run: npx playwright install --with-deps chromium
- name: Verify runner Chrome
# GitHub's Ubuntu runner image already ships Google Chrome, so use that
# directly for the headless e2e lane instead of downloading Playwright
# browser bundles inside the 30 minute job budget.
run: google-chrome --version

- name: Generate Paperclip config
run: |
Expand All @@ -216,6 +303,7 @@ jobs:
- name: Run e2e tests
env:
PAPERCLIP_E2E_SKIP_LLM: "true"
PAPERCLIP_PLAYWRIGHT_CHANNEL: "chrome"
run: pnpm run test:e2e

- name: Upload Playwright report
Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/release-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,10 @@ jobs:
- name: Install dependencies
run: pnpm install --no-frozen-lockfile

- name: Install Playwright browser
run: npx playwright install --with-deps chromium
- name: Verify runner Chrome
# Release smoke also runs headless on GitHub's Ubuntu image, so use the
# runner's preinstalled Chrome instead of a Playwright browser download.
run: google-chrome --version

- name: Launch Docker smoke harness
run: |
Expand Down Expand Up @@ -89,6 +91,7 @@ jobs:
PAPERCLIP_RELEASE_SMOKE_BASE_URL: ${{ env.SMOKE_BASE_URL }}
PAPERCLIP_RELEASE_SMOKE_EMAIL: ${{ env.SMOKE_ADMIN_EMAIL }}
PAPERCLIP_RELEASE_SMOKE_PASSWORD: ${{ env.SMOKE_ADMIN_PASSWORD }}
PAPERCLIP_PLAYWRIGHT_CHANNEL: "chrome"
run: pnpm run test:release-smoke

- name: Capture Docker logs
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,6 @@ tests/e2e/playwright-report/
tests/release-smoke/test-results/
tests/release-smoke/playwright-report/
.superset/
.superpowers/
.claude/worktrees/
.herenow
7 changes: 6 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,24 @@ COPY packages/shared/package.json packages/shared/
COPY packages/db/package.json packages/db/
COPY packages/adapter-utils/package.json packages/adapter-utils/
COPY packages/mcp-server/package.json packages/mcp-server/
COPY packages/skills-catalog/package.json packages/skills-catalog/
COPY packages/adapters/acpx-local/package.json packages/adapters/acpx-local/
COPY packages/adapters/claude-local/package.json packages/adapters/claude-local/
COPY packages/adapters/codex-local/package.json packages/adapters/codex-local/
COPY packages/adapters/cursor-cloud/package.json packages/adapters/cursor-cloud/
COPY packages/adapters/cursor-local/package.json packages/adapters/cursor-local/
COPY packages/adapters/gemini-local/package.json packages/adapters/gemini-local/
COPY packages/adapters/grok-local/package.json packages/adapters/grok-local/
COPY packages/adapters/openclaw-gateway/package.json packages/adapters/openclaw-gateway/
COPY packages/adapters/opencode-local/package.json packages/adapters/opencode-local/
COPY packages/adapters/pi-local/package.json packages/adapters/pi-local/
COPY packages/plugins/sdk/package.json packages/plugins/sdk/
COPY packages/plugins/plugin-llm-wiki/package.json packages/plugins/plugin-llm-wiki/
COPY --parents packages/plugins/sandbox-providers/./*/package.json packages/plugins/sandbox-providers/
COPY packages/plugins/paperclip-plugin-fake-sandbox/package.json packages/plugins/paperclip-plugin-fake-sandbox/
COPY packages/plugins/plugin-llm-wiki/package.json packages/plugins/plugin-llm-wiki/
COPY packages/plugins/plugin-workspace-diff/package.json packages/plugins/plugin-workspace-diff/
COPY patches/ patches/
COPY scripts/link-plugin-dev-sdk.mjs scripts/

RUN pnpm install --frozen-lockfile

Expand Down
33 changes: 13 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
<p align="center">
<img src="doc/assets/header.png" alt="Paperclip — runs your business" width="720" />
<img src="doc/assets/banner.jpg" alt="Paperclip is the app people use to manage AI agents for work." width="720" />
</p>

<p align="center">
<a href="#quickstart"><strong>Quickstart</strong></a> &middot;
<a href="https://paperclip.ing/docs"><strong>Docs</strong></a> &middot;
<a href="https://github.com/paperclipai/paperclip"><strong>GitHub</strong></a> &middot;
<a href="https://discord.gg/m4HZY7xNG3"><strong>Discord</strong></a> &middot;
<a href="https://x.com/papercliping"><strong>Twitter</strong></a>
<a href="https://x.com/papercliping"><strong>Twitter</strong></a> &middot;
<a href="https://paperclip.ing"><strong>Website</strong></a>
</p>

<p align="center">
Expand All @@ -24,15 +25,15 @@

<br/>

## What is Paperclip?
# Paperclip is the app people use to manage AI agents for work.

# Open-source orchestration for zero-human companies
Open-source orchestration for teams of AI agents.

**If OpenClaw is an _employee_, Paperclip is the _company_**
**If OpenClaw is an _employee_, Paperclip is the _company_.**

Paperclip is a Node.js server and React UI that orchestrates a team of AI agents to run a business. Bring your own agents, assign goals, and track your agents' work and costs from one dashboard.
Paperclip is a Node.js server and React UI that orchestrates a team of AI agents to run a business. Bring your own agents, assign goals, and track work and costs from one dashboard.

It looks like a task manager — but under the hood it has org charts, budgets, governance, goal alignment, and agent coordination.
It looks like a task manager. Under the hood: org charts, budgets, governance, goal alignment, and agent coordination.

**Manage business goals, not pull requests.**

Expand All @@ -44,10 +45,6 @@ It looks like a task manager — but under the hood it has org charts, budgets,

<br/>

> **COMING SOON: Clipmart** — Download and run entire companies with one click. Browse pre-built company templates — full org structures, agent configs, and skills — and import them into your Paperclip instance in seconds.

<br/>

<div align="center">
<table>
<tr>
Expand Down Expand Up @@ -113,7 +110,7 @@ Every conversation traced. Every decision explained. Full tool-call tracing and
<tr>
<td align="center">
<h3>🛡️ Governance</h3>
You're the board. Approve hires, override strategy, pause or terminate any agent — at any time.
Approve hires, override strategy, pause or terminate any agent — at any time.
</td>
<td align="center">
<h3>📊 Org Chart</h3>
Expand Down Expand Up @@ -222,7 +219,7 @@ Paperclip is a full control plane, not a wrapper. Before you build any of this y
</td>
<td>

**Governance & Approvals** — Board approval workflows, execution policies with review/approval stages, decision tracking, budget hard-stops, agent pause/resume/terminate, and full audit logging. You're the board — nothing ships without your sign-off.
**Governance & Approvals** — Board approval workflows, execution policies with review/approval stages, decision tracking, budget hard-stops, agent pause/resume/terminate, and full audit logging. Nothing ships without your sign-off.

</td>
</tr>
Expand Down Expand Up @@ -317,7 +314,7 @@ This starts the API server at `http://localhost:3100`. An embedded PostgreSQL da
**What does a typical setup look like?**
Locally, a single Node.js process manages an embedded Postgres and local file storage. For production, point it at your own Postgres and deploy however you like. Configure projects, agents, and goals — the agents take care of the rest.

If you're a solo-entreprenuer you can use Tailscale to access Paperclip on the go. Then later you can deploy to e.g. Vercel when you need it.
If you're a solo entrepreneur you can use Tailscale to access Paperclip on the go. Then later you can deploy to e.g. Vercel when you need it.

**Can I run multiple companies?**
Yes. A single deployment can run an unlimited number of companies with complete data isolation.
Expand Down Expand Up @@ -418,7 +415,7 @@ We welcome contributions. See the [contributing guide](CONTRIBUTING.md) for deta

## License

MIT &copy; 2026 Paperclip
MIT &copy; 2026 [Paperclip Labs, Inc](https://paperclip.ing)

## Star History

Expand All @@ -429,9 +426,5 @@ MIT &copy; 2026 Paperclip
---

<p align="center">
<img src="doc/assets/footer.jpg" alt="" width="720" />
</p>

<p align="center">
<sub>Open source under MIT. Built for people who want to run companies, not babysit agents.</sub>
<sub>Open source under MIT. Built for people who want to get work done, not babysit agents.</sub>
</p>
15 changes: 15 additions & 0 deletions cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,21 @@ By default, agents run on scheduled heartbeats and event-based triggers (task as

<br/>

## Paperclip Cloud Sync

Cloud upstream sync is behind the `Cloud Sync` experimental setting. Enable it in Instance Settings before pushing.

```bash
paperclipai cloud connect https://your-stack.paperclip.app
paperclipai cloud connect https://your-stack.paperclip.app --no-browser
paperclipai cloud push --company <local-company-id> --dry-run
paperclipai cloud push --company <local-company-id>
```

`cloud connect` authorizes the local instance against the target stack and stores the upstream token in the local instance secret store. The default path opens a browser for consent; `--no-browser` uses the device-code flow and prints the verification URL and user code.

`cloud push --dry-run` exports the selected local company, sends a preview bundle to the connected Cloud stack, and exits with code `2` when conflicts need user resolution. A schema mismatch exits with code `3`. Running without `--dry-run` stages chunks idempotently, applies the run, and prints the final summary and recent progress events.

## Development

```bash
Expand Down
2 changes: 2 additions & 0 deletions cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,10 @@
"@paperclipai/adapter-acpx-local": "workspace:*",
"@paperclipai/adapter-claude-local": "workspace:*",
"@paperclipai/adapter-codex-local": "workspace:*",
"@paperclipai/adapter-cursor-cloud": "workspace:*",
"@paperclipai/adapter-cursor-local": "workspace:*",
"@paperclipai/adapter-gemini-local": "workspace:*",
"@paperclipai/adapter-grok-local": "workspace:*",
"@paperclipai/adapter-opencode-local": "workspace:*",
"@paperclipai/adapter-pi-local": "workspace:*",
"@paperclipai/adapter-openclaw-gateway": "workspace:*",
Expand Down
Loading
Loading