Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1037 commits
Select commit Hold shift + click to select a range
8676795
ci: split e2e PR lane into three shards (#10629)
devinfoley Aug 1, 2026
a388ea1
Render workspace-ready comments as compact system notices (#10636)
cryppadotta Aug 1, 2026
8444e57
ci: pass e2e shard specs without separator (#10640)
devinfoley Aug 1, 2026
27f8c8d
feat(server): cap agent review rounds and escalate exhausted reviews …
devinfoley Aug 1, 2026
ada47be
fix(server): refuse agent-initiated issue assignment to paused agents…
devinfoley Aug 1, 2026
0f12721
fix(server): let board users cancel issues with an active review stag…
devinfoley Aug 1, 2026
a0dbe21
fix(server): stand down recovery while an operator-cancelled run is t…
devinfoley Aug 1, 2026
3dec88c
feat(agents): warn when an agent's escalation path routes to a paused…
devinfoley Aug 2, 2026
ddbcf53
fix(server): refuse agent delegation cycles back to an open ancestor'…
devinfoley Aug 2, 2026
592cade
feat(server): trigger the push-capability preflight from the issue's …
devinfoley Aug 2, 2026
e4b0152
fix(server): keep the agent invokable when a run fails on a workspace…
devinfoley Aug 2, 2026
14d4db6
fix(inbox): keep passive issue views out of Mine (#10581)
cryppadotta Aug 2, 2026
30c49c8
feat(decisions): add queues and prioritized attention feed (#10651)
cryppadotta Aug 2, 2026
173d6d2
Reclaim isolated worktree instances during teardown (#10649)
cryppadotta Aug 2, 2026
ec84eb7
fix(ui): defer Inbox re-sort to attention boundaries (#10623)
cryppadotta Aug 2, 2026
8540ce2
ci: shard general-server tests 4 ways (#10663)
devinfoley Aug 2, 2026
dcac49a
feat(workspaces): defer isolated setup until runtime start (#10653)
cryppadotta Aug 2, 2026
95d33e1
fix(inbox): archive tasks completed by human users (#10668)
cryppadotta Aug 2, 2026
0a09e4d
feat(decisions): add desk workflow and retention (#10672)
cryppadotta Aug 2, 2026
717684a
Add project folder browsing to skill imports (#9930)
cryppadotta Aug 2, 2026
2ffebd4
Test adapters in the environment a run would actually use (#10698)
devinfoley Aug 2, 2026
6008482
fix(decisions): remove clock race from sweep-expiry tests (#10701)
devinfoley Aug 2, 2026
8b83d69
feat(heartbeat): serialize shared-workspace issue runs with bounded b…
devinfoley Aug 2, 2026
772fa98
fix(ui): move IssueRow divider and hover wash to the row root (#10702)
scotttong Aug 2, 2026
bd86dbe
fix(codex-local): detect server-visible Codex credentials in ACP envi…
devinfoley Aug 2, 2026
799973f
fix(ui): hide empty inbox search sections (#10700)
devinfoley Aug 3, 2026
7a3815e
fix(heartbeat): surface the real cause when a git_worktree base canno…
devinfoley Aug 3, 2026
185515c
fix(external-objects): refresh PR status labels (#10704)
devinfoley Aug 3, 2026
97590ff
feat(dev): add pnpm dev:mobile and dev:both for prebuilt UI preview (…
devinfoley Aug 3, 2026
e0c2448
feat(server): authenticate server-side git clone and fetch with a com…
devinfoley Aug 3, 2026
75f6256
fix(server): resolve duplicate scrubGitCredentialText declaration on …
devinfoley Aug 3, 2026
2c90cf0
fix(server): serialize managed-checkout materialization and stop misa…
devinfoley Aug 3, 2026
d5045d6
fix(ui): keep mobile unread dots from indenting task rows (#10691)
cryppadotta Aug 3, 2026
bc5c392
fix(server): stop inferring PR credential preflight from issue text (…
cryppadotta Aug 3, 2026
c09ea71
feat(observability): add granular OpenTelemetry spans for sandbox sta…
nickyleach Aug 3, 2026
42d0ddc
test(e2e): deflake applications Connections list against the health s…
nickyleach Aug 3, 2026
ba396c6
feat(server): configure shared workspace concurrency (#10759)
cryppadotta Aug 3, 2026
af6b32d
feat(observability): add provider OTel spans - cache-hit flag, plugin…
nickyleach Aug 3, 2026
18f391e
feat(ui): add shared workspace concurrency select to workspace policy…
cryppadotta Aug 3, 2026
6a69a3d
refactor(observability): stop writing detailed per-step timing to the…
nickyleach Aug 3, 2026
9b9631b
feat(ui): chat-style tasks polish — rich-text composer, attachment ch…
scotttong Aug 3, 2026
8e7f1c0
feat(decisions): improve desk triage and queue parity (#10785)
cryppadotta Aug 4, 2026
2a90933
fix(ui): remove duplicate create-task loading status (#10756)
cryppadotta Aug 4, 2026
76f4420
fix(ui): follow managed sign-out redirects
cryppadotta Aug 4, 2026
aa6b6bc
chore(lockfile): refresh pnpm-lock.yaml (#10787)
github-actions[bot] Aug 4, 2026
bd7a13e
fix(daytona): replace bwrap user-namespace with su privilege drop (#1…
nickyleach Aug 4, 2026
2ab797d
fix(sandbox): reset step store for long-lived bridge work (#10813)
nickyleach Aug 4, 2026
cb52f0b
db: env-configurable client options; parallelize attention feed queri…
devinfoley Aug 4, 2026
dfcda67
feat(auth): default-open visible issue writes (#10804)
cryppadotta Aug 4, 2026
ca6416d
fix(server): preserve hot-restart shutdown snapshots (#10815)
cryppadotta Aug 4, 2026
f0b06d2
feat(claude): environment-aware test-environment probe and claude-loc…
devinfoley Aug 4, 2026
ded813a
feat(interactions): add governed agent addressees (#10252)
cryppadotta Aug 4, 2026
f91a6e2
feat(issues): contain cross-issue agent side effects (#10837)
cryppadotta Aug 4, 2026
678728f
feat: maintained in_review review-path contract + stalled-review acti…
cryppadotta Aug 4, 2026
74416e9
fix(server): render company-export YAML iteratively to stop stack ove…
nickyleach Aug 4, 2026
c647b8c
feat(acpx-engine): give sandbox.exec spans real parents (#10852)
nickyleach Aug 4, 2026
7e592c3
feat(codex): add identity-keyed host credential cache (#10853)
nickyleach Aug 4, 2026
7cff943
chore(ui): remove deprecated baseUrl from ui/tsconfig.json (#4067)
sparkeros Aug 4, 2026
2495e29
Preserve company display names in cloud tenants (#10845)
cryppadotta Aug 5, 2026
2ebc236
fix(server): accept parentIssueId alias in GET /issues (#4032)
scokeepa Aug 5, 2026
d114c49
feat(observability): give sandbox sync spans true wall-clock width (#…
nickyleach Aug 5, 2026
3f86508
docs: replace broken README Discord badge (#1727)
noahrasheta Aug 5, 2026
1f7b710
docs: expand AGENTS.md repo map (cli, skills-catalog, teams-catalog, …
santhiprakash Aug 5, 2026
1e44e50
docs: remove leaked fork-specific section from AGENTS.md (#9935)
santhiprakash Aug 5, 2026
5858ccb
feat: make in-app features cloud-aware (#10850)
cryppadotta Aug 5, 2026
e8ae528
feat(issues): explain cross-task agent writes with attribution, audit…
cryppadotta Aug 5, 2026
f0ed524
fix(ui): prefix audit board route (#10830)
cryppadotta Aug 5, 2026
68ddd6a
feat(activity): add two-tier all-actors audit feed (#10831)
cryppadotta Aug 5, 2026
8142e54
feat(activity): merge the audit page into one rich Activity page (#10…
cryppadotta Aug 5, 2026
c54936e
fix(openclaw-gateway): use per-agent claimedApiKeyPath in wake text (…
jooneyp Aug 5, 2026
ef33c1d
fix(decisions): retire completed-target decisions and link targets fr…
cryppadotta Aug 5, 2026
6ffe9df
fix(auth): clarify protected-agent assignment blocks (#10893)
cryppadotta Aug 5, 2026
14d7558
Remove decision and review summaries from issue headers (#10891)
cryppadotta Aug 5, 2026
1fa36be
fix(ui): use HTTP-safe clipboard copy everywhere (#10875)
cryppadotta Aug 5, 2026
ffd62a4
fix(adapter-utils): carry the workspace origin remote into transporte…
devinfoley Aug 5, 2026
8ac2526
chore(plugin-daytona): pin @daytonaio/sdk to 0.203.0 (#10907)
nickyleach Aug 5, 2026
5888cbf
fix(issues): restore checkout after accepted confirmations (#10909)
cryppadotta Aug 5, 2026
427509e
fix(ui): show the synced company logo on the Cloud org switcher trigg…
cryppadotta Aug 5, 2026
c2b41bb
fix(issues): quiet missing-disposition warnings while a live continua…
cryppadotta Aug 5, 2026
72b509c
Recognize delivered workspaces and reap terminal worktrees (#10908)
cryppadotta Aug 5, 2026
b6e5801
ci: split serialized tests into five shards (#10923)
devinfoley Aug 5, 2026
00a24d7
ci: split general-server tests into five shards with refreshed durati…
devinfoley Aug 5, 2026
b1b7a9d
feat(settings): alphabetize experimental cards and drop the Experimen…
scotttong Aug 6, 2026
f5e9ca3
fix(adapters): keep user-scoped env bindings on the agent Test action…
nickyleach Aug 6, 2026
ac3b2e1
fix(ui): use cloud logout for managed sign-out (#10937)
cryppadotta Aug 6, 2026
dc71fef
feat(ui): show task identifier in task-detail breadcrumb header (#10933)
scotttong Aug 6, 2026
f950952
fix: reliably show plans in the Plan pane and restore sticky plan con…
scotttong Aug 6, 2026
e43f187
feat(secrets): add human-approved secret proposals (#9934)
cryppadotta Aug 6, 2026
5b62a38
feat(settings): add experimental Simplified English Interactions flag…
cryppadotta Aug 6, 2026
f554d67
fix(server): add explicit review verdict policies (#10931)
cryppadotta Aug 6, 2026
814cb33
feat(server): allow agents to resolve review confirmations (#10939)
cryppadotta Aug 6, 2026
2ea22d6
fix(ui): white text on light-mode user chat bubbles (#10952)
scotttong Aug 6, 2026
e591e75
perf(db): index context_snapshot/payload issueId lookups used by reco…
cryppadotta Aug 6, 2026
656ecfa
fix(server): keep Date fields intact through secret redaction; harden…
cryppadotta Aug 6, 2026
52b8741
perf(server): cut steady-state DB hot paths in dashboard, attention, …
cryppadotta Aug 6, 2026
f258b34
fix(ui): unify cloud-managed sign-out (#10994)
cryppadotta Aug 6, 2026
75acc46
feat(sandbox-providers): pre-fill environment form with default sizin…
devinfoley Aug 6, 2026
d84c5ea
feat(ui): hide task priority from the UI (keep data model) (#11024)
scotttong Aug 6, 2026
cfed36e
feat(plugin-daytona): persistent session model with plain command dis…
nickyleach Aug 7, 2026
ea83c5c
feat(task-chat): bring back copy/👍/👎 actions on the agent bubble foot…
scotttong Aug 7, 2026
03cfad7
feat(apps): connect Notion through MCP OAuth (#11009)
cryppadotta Aug 7, 2026
9ace548
feat(observability): rename sandbox provider spans and add run-time w…
nickyleach Aug 7, 2026
35132af
fix(config): preserve extensions and guard invalid repairs (#11005)
cryppadotta Aug 7, 2026
f6c6452
fix(server): preserve managed environment drift on boot (#10979)
cryppadotta Aug 7, 2026
5da382f
feat(skills): require explicit merge modes (#10978)
cryppadotta Aug 7, 2026
9485ffe
fix(config): preserve env files during managed updates (#10980)
cryppadotta Aug 7, 2026
4e76227
feat(plugin-daytona): stream session command logs behind useLogStream…
nickyleach Aug 7, 2026
b67c512
feat(ui): live run label → run detail, running row → task detail (#11…
scotttong Aug 7, 2026
11e5665
feat(ui): port onboarding flow from prototype; add cloud + local vari…
tonio-alucema Aug 7, 2026
4683f26
chore(lockfile): refresh pnpm-lock.yaml (#11036)
github-actions[bot] Aug 7, 2026
01b51dc
fix(runtime): stop Live badge and Working shimmer after task teardown…
nickyleach Aug 7, 2026
9abb600
docs(connections): MCP-direct/DCR playbook section + Notion dry-run a…
cryppadotta Aug 7, 2026
42c7356
fix(heartbeat): backfill projectWorkspaceId when restoring a reused e…
nguyenm7 Aug 7, 2026
b18b0fc
feat: refine app connections and legacy worktree startup (#11040)
cryppadotta Aug 7, 2026
3435920
docs: minimize plan task graphs (#11057)
cryppadotta Aug 7, 2026
a71b9cf
feat(skills): add MCP integration preparation skill (#11063)
cryppadotta Aug 7, 2026
0a511ed
feat(apps): support multiple provider connections (#11060)
cryppadotta Aug 7, 2026
6b7e081
feat(acp): stream Daytona sandbox agent output and remove the host ou…
nickyleach Aug 7, 2026
384e5f6
revert(ui): back out onboarding port (#10786) (#11067)
tonio-alucema Aug 7, 2026
6772423
chore(lockfile): refresh pnpm-lock.yaml (#11068)
github-actions[bot] Aug 7, 2026
d5208d3
feat(adapter-utils): add host-side pack span to managed-runtime tarba…
nickyleach Aug 8, 2026
1791979
refactor(a11y): add ARIA progressbar attributes to BudgetPolicyCard (…
bluzername Aug 8, 2026
34fe57a
fix(server): ignore sibling worktrees in dev watch (#11074)
scotttong Aug 8, 2026
4e9a78d
feat(ui): persist task chat composer drafts (#11076)
scotttong Aug 8, 2026
cc35c3c
feat: structure and humanize recovery notices (#11075)
scotttong Aug 8, 2026
19be4cf
refactor(a11y): add scope=col to the agent costs table headers (#1789)
bluzername Aug 8, 2026
ebf2b8f
fix(server): persist worktree runtime port when ambient PORT does not…
manavshrivastavagit Aug 9, 2026
6a4e2e1
fix(routes): return 409 for routine checkout conflicts (#3790)
LeonSGP43 Aug 10, 2026
f917378
feat(release): add smoke-gated nightly channel and lane-separated Doc…
devinfoley Aug 10, 2026
5ca752d
fix(server): raise company import zip upload limit to 1 GB and make i…
devinfoley Aug 10, 2026
30f6999
fix(release-smoke): configurable readiness timeout and diagnostics fo…
devinfoley Aug 10, 2026
f94f600
fix(release-smoke): pin the smoke container to the lan bind preset (#…
devinfoley Aug 10, 2026
5a0985f
test(release-smoke): update onboarding spec for the mission-first wiz…
devinfoley Aug 10, 2026
4594696
feat(adapter-codex-local): add secure device-login building blocks (#…
nickyleach Aug 10, 2026
8f7b8b3
feat(release): add human-gated beta channel with stable soak enforcem…
devinfoley Aug 10, 2026
d816eb8
fix(server): keep imported tasks quiescent under the productivity rev…
devinfoley Aug 11, 2026
4c062a0
fix(ui): stop coercing imported agents to the destination CEO adapter…
devinfoley Aug 11, 2026
35aaaa0
feat(server): preserve task timestamps and hierarchy through company …
devinfoley Aug 11, 2026
6601014
fix(release): reject promotion sources that predate their channel too…
devinfoley Aug 11, 2026
d648bec
refactor(ci): split workspaces-a into two Vitest native shards
devinfoley Aug 11, 2026
66575fe
fix(paperclip-page): scope uploader credentials to the publish helper…
cryppadotta Aug 11, 2026
9cdaa54
fix(ui): remember folded inbox subtasks (#11069)
cryppadotta Aug 11, 2026
b58ce27
fix: isolate execution workspace summaries (#10790)
cryppadotta Aug 11, 2026
c4abecb
fix(skills): refresh project folders in place (#11066)
cryppadotta Aug 11, 2026
1ea2f0e
feat(cli): add 'paperclipai channels' to show release lanes and the c…
devinfoley Aug 11, 2026
2da6a24
fix(release): surface recovery commands when a lane tag push is rejec…
devinfoley Aug 11, 2026
815e49b
feat: make chat-style tasks the default experience (#11101)
scotttong Aug 11, 2026
7ea2068
fix(files): only highlight accessible workspace file links (#11090)
cryppadotta Aug 11, 2026
71e9d6b
feat(release): candidate-branch beta builds and the release checklist…
devinfoley Aug 11, 2026
3e1ea39
fix(inbox): honor saved policy for explicit targets (#11221)
cryppadotta Aug 11, 2026
7734f4b
fix(ui): keep slash autocomplete scrollable in dialogs (#11222)
cryppadotta Aug 11, 2026
45dfb18
fix(ui): add undo action to inbox archive toast (#11220)
cryppadotta Aug 11, 2026
145d869
Remove decision training UI (#11225)
cryppadotta Aug 11, 2026
b847e8b
perf(server): reduce issue detail request overhead (#10414)
cryppadotta Aug 11, 2026
0044fa8
Let tenants edit env vars on managed sandbox environments; add manage…
devinfoley Aug 11, 2026
5bb2490
feat(ui): surface all issue documents and agent artifacts in chat-sty…
scotttong Aug 11, 2026
2494a2a
perf: add repeatable issue-detail baseline rig (#10409)
cryppadotta Aug 11, 2026
23a1b02
feat(server): chunked resumable company import transfers (#11223)
devinfoley Aug 11, 2026
8f47824
fix(adapter-utils): close sandbox stdin file race with atomic write a…
nickyleach Aug 11, 2026
0a95ada
feat(server): chunked import preview endpoint and resumable upload in…
devinfoley Aug 11, 2026
3b74ff4
fix(ui): use issuePrefix instead of name-derived prefix in create dia…
webdevdot Aug 11, 2026
c0bdf26
chore(db): collapse Drizzle migration snapshot diffs and block auto-m…
nickyleach Aug 11, 2026
b5ebda1
fix(grok-local): report real token usage and cost instead of hardcode…
vmarchaud Aug 12, 2026
0aa743f
build(db): clean dist before drizzle generate (#11241)
devinfoley Aug 12, 2026
d5bb396
fix: pass sandbox provider credential env vars to plugin workers; hid…
devinfoley Aug 12, 2026
9adeb4a
fix(ui): fetch the web app manifest with credentials (#11245)
devinfoley Aug 12, 2026
d90f4d4
fix(ui): survive first load against a cold backend without a blank pa…
devinfoley Aug 12, 2026
f16071a
fix(ui): use a fictional tailnet hostname in the vite proxy test (#11…
devinfoley Aug 12, 2026
67001ec
chore(db): treat Drizzle migration snapshots as binary in diffs (#11254)
nickyleach Aug 12, 2026
9c94116
fix(ui): keep new task dialog visible above mobile keyboard (#11281)
cryppadotta Aug 12, 2026
e5a7fd7
Add sandbox device-login for the Codex adapter (#11237)
nickyleach Aug 12, 2026
1a37742
fix(ui): add mobile blocker actions (#11282)
cryppadotta Aug 12, 2026
f9bd043
fix(server): stop terminal workspace reaper starving on oldest candid…
nickyleach Aug 12, 2026
6a5b293
test(server): fix onboarding first-task teardown foreign-key race (#1…
nickyleach Aug 12, 2026
2c53437
fix(server): authenticate cloud-proxied browsers on the live-events w…
devinfoley Aug 12, 2026
01112c3
fix(ui): always give respondWith a real Response in the sw fetch fall…
devinfoley Aug 12, 2026
c57c0f7
fix(sandbox-providers): accept bsdtar listings in the syncOut tarball…
devinfoley Aug 12, 2026
f1931d0
test(server): fix flaky workspace-busy retry-row read race (#11293)
nickyleach Aug 12, 2026
ff5fd62
Resolve the environment secret companyId context on first save (#11291)
devinfoley Aug 12, 2026
0ee0543
feat(ui): refine the chat-style task workflow (#11263)
scotttong Aug 12, 2026
e31951a
feat: Claude agent setup-token login in a sandbox (#11286)
nickyleach Aug 12, 2026
276730d
fix(server): recognize cross-package Zod errors (#10168)
cucurigoo Aug 12, 2026
61a5b7c
fix(ui): stop the selection ping-pong on archived company URLs (#11300)
devinfoley Aug 12, 2026
04bf7a6
feat(observability): instrument stage.sync host steps and home the ag…
nickyleach Aug 12, 2026
5521d76
fix(claude-local): avoid root-only skip permissions failure (#9463)
elJayAdvisor Aug 12, 2026
8b1483e
fix(ui): render board approval payload prose as markdown (#9817)
erd0s Aug 12, 2026
c557459
fix(routines): exclude assignee configuration from detail responses (…
edgardfrz Aug 12, 2026
0db8480
fix(SAG-2595): land updatedSince issues-list filter on master (#9050)
dmndbrp-oss Aug 12, 2026
fc5c6ff
fix(server): return 404 instead of 500 for non-UUID company refs (#9959)
christianlappin Aug 12, 2026
676e20a
fix(routines): reject HMAC webhook replays (#9994)
panbanda Aug 12, 2026
1f7959b
fix(codex-local): skip benign stderr warnings when deriving the fallb…
stubbi Aug 12, 2026
9166974
fix(server): close tool-access cross-tenant ID oracles (#9589)
sauerdaniel Aug 12, 2026
8a5c061
fix(adapter-utils): forward sandbox callback bridge traffic to the lo…
stubbi Aug 12, 2026
2f1c0e0
fix(hermes): surface silent nonzero exit failures (#10107)
cucurigoo Aug 12, 2026
b42efe2
fix(ui): gate built-in agent sidebar query (#10116)
cucurigoo Aug 12, 2026
20482a4
fix(server): gate heartbeat-fallback comment to never publish raw tra…
ericdfields Aug 12, 2026
106955b
fix(ui): gate summary built-in requests by feature flag (#10170)
cucurigoo Aug 12, 2026
68c6996
fix(ui): keep selected run lifecycle and logs current (#10169)
cucurigoo Aug 12, 2026
a0bdf38
fix(agents): refuse to hire onto an adapter this instance cannot run …
stubbi Aug 12, 2026
6d2eab7
fix(server): retry runs that hit a sandbox provider worker restart wi…
stubbi Aug 12, 2026
c6727e7
fix(server): don't implicitly reopen a blocked issue when the same PA…
ericdfields Aug 12, 2026
4660562
fix(opencode-local): make the model-availability probe non-fatal (#10…
PhilipAD Aug 12, 2026
b7b8fbf
fix(adapter-utils): let explicit PAPERCLIP_API_URL override the deriv…
Sergio-LPA Aug 12, 2026
6a546e8
fix(server): align agent run JWT default TTL with documented 48h defa…
dylanroy Aug 12, 2026
a8d118a
Prefer public base URL for generated invite links (#7619)
dmndbrp-oss Aug 12, 2026
d24a79f
ci(dependabot): surface major npm updates as one grouped weekly PR (#…
devinfoley Aug 13, 2026
a09d7dc
feat(ui): bounce cold arrivals off archived company URLs, add Unarchi…
devinfoley Aug 13, 2026
1e07d5b
fix(db): give the last two embedded-Postgres migration tests a timeou…
tonio-alucema Aug 13, 2026
f0e6c0f
feat(server): receive and apply the Paperclip Cloud onboarding seed (…
tonio-alucema Aug 13, 2026
d0d242e
feat(server): reopen an archived isolated execution workspace in plac…
nickyleach Aug 13, 2026
0a1f9fd
fix(adapters): wrap modulePath in pathToFileURL() before dynamic impo…
fronc Aug 13, 2026
166f381
fix(runtime): only rewrite base-URL port for loopback hosts (#10258)
ericdfields Aug 13, 2026
b5bb236
Fix stale closure-comment wakeups on done issue updates (#8656)
raviy06 Aug 13, 2026
d68cf32
build(deps): bump @codemirror/view from 6.43.1 to 6.43.8 (#11321)
dependabot[bot] Aug 13, 2026
3040db3
build(deps): bump @agentclientprotocol/claude-agent-acp from 0.63.0 t…
dependabot[bot] Aug 13, 2026
70e6c80
build(deps-dev): bump @types/express-serve-static-core from 5.1.1 to …
dependabot[bot] Aug 13, 2026
49b80e3
build(deps): bump dompurify from 3.4.12 to 3.4.13 (#11305)
dependabot[bot] Aug 13, 2026
88e1ccb
build(deps): bump @aws-sdk/client-s3 from 3.1075.0 to 3.1106.0 (#11315)
dependabot[bot] Aug 13, 2026
7787106
fix board key issue writes across assignees (#9025)
ApolinarioRatio Aug 13, 2026
8172254
build(deps-dev): bump rollup from 4.62.2 to 4.62.4 (#11319)
dependabot[bot] Aug 13, 2026
3cd5967
build(deps): bump @modelcontextprotocol/sdk from 1.29.0 to 1.30.0 (#1…
dependabot[bot] Aug 13, 2026
eb6c6a8
build(deps): bump lexical from 0.46.0 to 0.49.0 (#10724)
dependabot[bot] Aug 13, 2026
7ee2b52
chore(lockfile): refresh pnpm-lock.yaml (#11328)
github-actions[bot] Aug 13, 2026
68ea3fc
test(ui): stabilize annotation popover submit-shortcut test (#11330)
nickyleach Aug 13, 2026
062271e
build(deps): bump mermaid from 11.16.0 to 11.16.1 (#11306)
dependabot[bot] Aug 13, 2026
4469432
fix(issues): make DELETE /api/issues/:id succeed for issues with depe…
nickyleach Aug 13, 2026
403fcef
build(deps-dev): bump vite from 6.4.1 to 6.4.3 (#11317)
dependabot[bot] Aug 13, 2026
031003c
fix(ui): search parent-issue picker on the server (#11334)
nickyleach Aug 13, 2026
04432f8
build(deps): align Lexical packages at 0.49.0 (#10728)
dependabot[bot] Aug 13, 2026
534c1a9
chore(lockfile): refresh pnpm-lock.yaml (#11339)
github-actions[bot] Aug 13, 2026
9b1fd42
test(grok-local): isolate billing env in usage cost test (#11285)
devinfoley Aug 13, 2026
eabecc6
feat(annotations): include issue document annotations in agent review…
scotttong Aug 13, 2026
0819cac
feat(secrets): add agent-readable /secrets/catalog endpoint (#9530)
austinpilz Aug 13, 2026
05d58cd
fix(tool-gateway): keep unsigned ask-first requests out of the review…
nickyleach Aug 13, 2026
5ca7b4c
fix(security): standardize paperclipai CLI guidance on safe npx path …
nickyleach Aug 13, 2026
aac6ce8
fix(ui): read the onboarding company prefix from the path, not the ro…
tonio-alucema Aug 14, 2026
23bc45a
Rebase onto upstream/master (2026-08-14): 299 commits (d5b9f6c8..aac6…
claude Aug 14, 2026
1fc037f
fix(ci): remove pnpm-lock.yaml from rebase commit
claude Aug 14, 2026
d4efb12
fix(shared): remove enableCloudSync references after upstream Cloud S…
claude Aug 14, 2026
741a2ea
fix(codex-local): repair syntax errors from merge conflict resolution
claude Aug 14, 2026
37831ea
fix(codex-local): remove duplicate firstMeaningfulStderrLine export
claude Aug 14, 2026
32d53aa
fix(codex-local): add missing firstNonEmptyLine helper
claude Aug 14, 2026
6757969
fix(test): make createFakeDb options parameter optional
claude Aug 14, 2026
9892979
fix: resolve remaining TypeScript errors and test failures from rebase
claude Aug 14, 2026
d0a97fe
fix(test): add new feature flags to capabilities test expectation
claude Aug 14, 2026
2c57e2a
fix: resolve health, execution-target, and workspace test failures
claude Aug 14, 2026
cedcdd2
fix: ACPX session-init error handling and invite-url test mock
claude Aug 14, 2026
e1b0a2d
fix: resolve heartbeat, onboarding, sidebar, issue-detail, and exec-t…
claude Aug 14, 2026
51b2b0d
fix: claude probe usage-limit classification and e2e Connect button s…
claude Aug 14, 2026
989eea4
fix(codex-local): hosted credential advice and auth-copyback director…
claude Aug 14, 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
  •  
  •  
  •  
265 changes: 265 additions & 0 deletions .agents/skills/create-paperclip-bundled-skill/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
---
name: create-paperclip-bundled-skill
description: >
Turn an idea, tweet, or task into a skill in the Paperclip skills catalog
(packages/skills-catalog). Use when asked to FIND or MAKE a skill and publish
it as a bundled/optional catalog skill: research prior art, reference or
author it, add examples, regenerate the manifest, open a PR.
---

# Create a Paperclip Bundled Skill

Take source material — a tweet, a task description, a blog post, "make a skill
that does X" — and land it as a skill in the Paperclip skills catalog
(`packages/skills-catalog/`), delivered as a reviewed PR. The catalog is the
shelf every Paperclip company browses and installs from, so the bar is: correct
metadata, useful instructions, worked examples, and a clean validation run.

The core rule is **FIND before MAKE**: if a good skill already exists (in the
catalog, in this repo, or published on GitHub), reference or adapt it instead
of writing a duplicate from scratch.

## When to use

- A human sends a tweet/link/idea and asks for it to become a Paperclip skill.
- A task asks to bundle an existing repo skill into the catalog.
- A task asks to add an external published skill to the catalog.

## When not to use

- The skill is company-private (belongs in that company's library via the
Skills UI/API, not the shipped catalog).
- You only need a repo-internal agent skill for working on Paperclip itself —
that goes in `.agents/skills/` or `skills/`, with no catalog machinery.

## Step 0 — Capture the source material

Understand exactly what the skill should teach before writing anything.

**Tweets / X links.** Use the `xc` CLI (X API client). Paperclip engineering
agent environments ship it preinstalled and pre-authenticated; it is not a
tool you install or mint credentials for yourself. Check availability before
relying on it:

```sh
command -v xc && xc whoami # on PATH and authenticated? if not, use the fallback below
```

```sh
xc get <post-url-or-id> --json # the post itself (conversation_id, author)
xc search 'conversation_id:<id>' --archive --json # rest of the thread (>7 days old needs --archive)
xc user <username> # author context
xc search '<topic keywords>' -n 30 # related discussion
```

If `xc` is not on PATH, is unauthenticated, or the account lacks read access
(the check above fails for any reason), delegate the
fetch to a teammate with X/Twitter access (e.g. the Content Strategist agent)
via a child issue: give them the URL and ask for full text of the post + thread
+ any linked content.

**Other sources.** Fetch linked articles/READMEs directly. Record the source
URL — it goes in the skill body or PR description as attribution.

Distill: what is the repeatable procedure? What inputs does it take? What does
"done" look like? If the source is just an aspiration ("agents should write
better commit messages"), you are authoring the procedure yourself — say so in
the PR.

## Step 1 — FIND: search for an existing skill

Search in this order; stop when you have a clear winner.

1. **Already in the catalog?** Avoid duplicates (duplicate slugs fail the
build):
```sh
grep -i '<topic>' packages/skills-catalog/generated/catalog.json
ls packages/skills-catalog/catalog/{bundled,optional}/*/
```
2. **Already in this repo?** Check `.agents/skills/`, `skills/`, and issue
history (`gh search issues` / Paperclip board) for prior work on the topic.
3. **Published on GitHub?** Skills are conventionally a directory with a
`SKILL.md`:
```sh
gh search code --filename SKILL.md "<topic>" --limit 20
gh search repos "<topic> skill" --limit 20
```
Also check known collections (e.g. `anthropics/skills`) and do a web search
for `<topic> agent skill SKILL.md`.

Judge candidates by: does the SKILL.md actually contain the procedure (not a
stub)? Is it maintained? What does it bundle (scripts raise the trust level)?
Is the license compatible with redistribution? Then pick a path:

- **Good external skill exists** → add it as an **external reference**
(Step 2A). It stays attributed to and pinned at the upstream repo.
- **Partial match** → author a local skill (Step 2B) that adapts the idea;
credit the source with a link in the SKILL.md body.
- **Nothing usable** → author a new local skill (Step 2B).

## Step 2 — Choose kind, category, and slug

- **kind**: default to `optional`. Use `bundled` only when the skill should
ship to every Paperclip company by default — that needs explicit human/board
direction, not your judgment call.
- **category**: reuse an existing directory when one fits (`browser`,
`content`, `docs`, `finance`, `paperclip-operations`, `product`, `quality`,
`research`, `software-development`). New categories are allowed but must be
lowercase kebab-case slugs.
- **slug**: lowercase kebab-case (`^[a-z0-9]+(-[a-z0-9]+)*$`), unique across
the whole catalog (both kinds).

The skill lives at
`packages/skills-catalog/catalog/<kind>/<category>/<slug>/` and its canonical
key is `paperclipai/<kind>/<category>/<slug>`.

## Step 2A — External reference path (`catalog-ref.json`)

The directory contains **only** `catalog-ref.json` (a directory with both
`catalog-ref.json` and `SKILL.md` fails the build). The manifest builder
fetches the pinned files from GitHub at build time and inventories them.

```sh
# Pin the exact commit for the chosen ref (tag or branch)
gh api repos/<owner>/<repo>/commits/<ref> --jq .sha
```

```json
{
"source": {
"type": "github",
"hostname": "github.com",
"owner": "<owner>",
"repo": "<repo>",
"ref": "<tag-or-branch>",
"commit": "<40-char sha from above>",
"path": "<dir inside the repo containing SKILL.md, or ''>"
},
"files": ["SKILL.md", "references/**", "scripts/run.py"],
"defaultInstall": false,
"recommendedForRoles": ["researcher"],
"requires": ["python3"],
"tags": ["topic", "keywords"]
}
```

Rules the builder enforces:

- `files` entries are exact relative paths or `dir/**` globs; `SKILL.md` must
be included and must have frontmatter with `name` and `description`.
- If the upstream frontmatter declares `key`/`slug`, they must match the
catalog placement — otherwise pick a matching slug or use the local path.
- `commit` must be a full 40-hex SHA; every listed file must be ≤ 1 MiB.
- `recommendedForRoles`, `requires`, `tags` live in the JSON (there is no
local SKILL.md to carry them).

See `catalog/optional/research/last30days/catalog-ref.json` for the live
example, and `examples/external-reference.md` next to this skill.

## Step 2B — Author a local catalog skill

Layout:

```
catalog/<kind>/<category>/<slug>/
├── SKILL.md # required entrypoint
├── examples/ # 1–2 worked examples (Step 3)
├── references/ # optional deep-dive docs
├── scripts/ # optional — raises trust level, avoid unless needed
└── assets/ # optional templates/images
```

`SKILL.md` frontmatter (all validated by the builder):

```markdown
---
name: <slug>
description: >
40–300 chars. Routing logic, not marketing: what it does, when to use it,
when not to.
key: paperclipai/<kind>/<category>/<slug>
recommendedForRoles:
- engineer # non-empty; used for staffing suggestions
tags:
- topic # non-empty; used for browse/search
---
```

Optional frontmatter: `defaultInstall: true` (only for skills every new
company should get), `requires: [node, python3, ...]` for runtime deps.

Body: follow `docs/guides/agent-developer/writing-a-skill.md` — "When to use"
/ "When not to use" sections, concrete commands over prose, supporting detail
in `references/`. If the skill came from a tweet or external source, link it
in the body for attribution.

Trust level is derived from files, not declared: any `scripts/` file makes the
skill `scripts_executables` (install becomes audit-gated and you must extend
the `scriptBearing` expectation in `src/shipped-catalog.test.ts`); `assets/`
or non-markdown files make it `assets`; markdown-only skills stay
`markdown_only`. Prefer markdown-only.

## Step 3 — Write 1–2 worked examples

Create `examples/` inside the skill directory with one or two markdown files,
each a complete input → application → output walkthrough (realistic input, the
skill's steps applied, the finished artifact). These ship with the skill so
installers can judge it before running it, and they keep the trust level at
`markdown_only` because they are `.md` files.

Name them by scenario, e.g. `examples/rewrite-release-note.md`.

## Step 4 — Regenerate the manifest and update tests

Never hand-edit `generated/catalog.json`; it is deterministic build output.

```sh
pnpm --filter @paperclipai/skills-catalog build:manifest # regenerates generated/catalog.json
pnpm --filter @paperclipai/skills-catalog validate # must report no errors
```

(External references need network access to GitHub during these steps.)

Then update `packages/skills-catalog/src/shipped-catalog.test.ts`:

- add the new key to `EXPECTED_BUNDLED_KEYS` or `EXPECTED_OPTIONAL_KEYS`
(alphabetical order);
- if the skill bears scripts, add it to the `scriptBearing` expectation.

```sh
pnpm --filter @paperclipai/skills-catalog test
```

The test suite also enforces the ≤300-char frontmatter description budget
across the repo and the ≥40-char description / non-empty roles+tags rules for
every catalog skill.

## Step 5 — Open the PR

Follow the `prepare-paperclip-pr` skill (`.agents/skills/prepare-paperclip-pr/`)
against `paperclipai/paperclip` master. The diff should contain exactly:

1. the new skill directory (SKILL.md + examples/ + supporting files, **or**
catalog-ref.json),
2. the regenerated `generated/catalog.json`,
3. the `shipped-catalog.test.ts` expectation update.

In the PR body: link the source material (tweet URL, upstream repo), state
whether this is a new skill / adaptation / external reference, and note the
trust level. Reference PR #10410 (simplified-english) as the shape of a
minimal optional-skill PR.

## Gotchas

- `generated/catalog.json` staleness is a validation error — always rerun
`build:manifest` after any file change inside the skill directory (the
inventory carries per-file sha256 hashes).
- Duplicate `slug` across bundled *and* optional fails the build, not just
duplicate keys.
- Symlinks inside a skill directory must resolve within it; directory
symlinks are rejected — copy files in.
- The `bundled` kind and `defaultInstall` are independent axes; don't set
`defaultInstall: true` casually on optional skills.
- For external references the builder fetches from GitHub on every manifest
build; a moved/deleted upstream breaks the build, which is why `commit` is
pinned — prefer upstream tags for `ref`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Example — FIND path: tweet → existing skill → external reference

Real artifact: `packages/skills-catalog/catalog/optional/research/last30days/`.

## Input

Dotta sends a tweet praising a "last 30 days" research workflow that sweeps
Reddit/X/YouTube for what changed recently on a topic.

## Step 0 — Capture

```sh
xc get https://x.com/<author>/status/<id> --json # post text + conversation_id
xc search 'conversation_id:<id>' --archive --json # the rest of the thread
```

The thread links a GitHub repo: `mvanhorn/last30days-skill`, which already
contains a proper skill (`skills/last30days/SKILL.md` plus scripts and
references).

## Step 1 — FIND

- Not in the catalog, not in this repo.
- The upstream repo IS the skill — maintained, tagged releases, real SKILL.md.
- Verdict: **FIND** — add it as an external reference, keep attribution and
updates upstream.

## Step 2A — catalog-ref.json

Placement: `optional` / `research` / `last30days`. Pin the release tag to an
exact commit:

```sh
gh api repos/mvanhorn/last30days-skill/commits/v3.3.0 --jq .sha
# → daca71f89eb71d0d56d01a43ed7627aa919dba4f
```

`catalog/optional/research/last30days/catalog-ref.json` (the only file in the
directory):

```json
{
"source": {
"type": "github",
"hostname": "github.com",
"owner": "mvanhorn",
"repo": "last30days-skill",
"ref": "v3.3.0",
"commit": "daca71f89eb71d0d56d01a43ed7627aa919dba4f",
"path": "skills/last30days"
},
"files": [
"SKILL.md",
"agents/openai.yaml",
"references/**",
"scripts/briefing.py",
"scripts/compare.sh",
"scripts/last30days.py",
"scripts/lib/**",
"scripts/setup-keychain.sh",
"scripts/store.py",
"scripts/watchlist.py"
],
"defaultInstall": false,
"recommendedForRoles": ["researcher", "marketer", "product-manager", "analyst"],
"requires": ["node", "python3"],
"tags": ["research", "last-30-days", "social-media", "trends", "citations", "reddit", "x", "youtube"]
}
```

Metadata (`recommendedForRoles`, `requires`, `tags`) lives in the JSON because
there is no local SKILL.md to carry it.

## Steps 4–5 — Manifest, tests, PR

- `pnpm --filter @paperclipai/skills-catalog build:manifest` fetches the
pinned files from GitHub and inventories them (network required).
- The skill bundles `scripts/`, so trust level derives to
`scripts_executables` → it must also be added to the `scriptBearing`
expectation in `src/shipped-catalog.test.ts`, alongside
`EXPECTED_OPTIONAL_KEYS`.
- PR diff: `catalog-ref.json`, regenerated `generated/catalog.json`, test
expectations. PR body links both the tweet and the upstream repo, and calls
out the elevated trust level so review is deliberate.
Loading
Loading