Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
974 commits
Select commit Hold shift + click to select a range
c62fa8d
docs(agents): add create-paperclip-bundled-skill agent skill (#10477)
cryppadotta Jul 30, 2026
916c135
Replace host-to-host Cloud Sync with full-fidelity company Import/Exp…
devinfoley Jul 30, 2026
187a90b
Add opt-in in-flight run-log mirroring with graceful-shutdown flush (…
devinfoley Jul 30, 2026
efe8b3b
feat(skills-catalog): add optional /simplified-english skill (#10410)
cryppadotta Jul 30, 2026
fcf66f3
feat(skills): add managed skill rename API (#9688)
cryppadotta Jul 30, 2026
39666aa
fix(server): clarify execution policy decision comments (#9105)
samrusani Jul 30, 2026
a5d252d
feat(skills): add confirmed inbox gardening workflow (#10462)
cryppadotta Jul 30, 2026
1c52f02
Let cloud tenant sessions reach companies they hold memberships in (#…
devinfoley Jul 30, 2026
276ae3a
Harden company import: durable UI, async jobs, integrity guard, batch…
devinfoley Jul 30, 2026
7cfb655
fix(worktree): disable automatic database backups (#10520)
cryppadotta Jul 31, 2026
740554a
feat: add a no-op OpenTelemetry span seam for the sandbox startup pat…
nickyleach Jul 31, 2026
5ec7ce7
Upload company import packages as compressed zip uploads (fix large-c…
devinfoley Jul 31, 2026
5cffd5c
feat(sandbox): declare and collect the advisory read-write intent (#1…
nickyleach Jul 31, 2026
9f7565f
feat: activate OpenTelemetry spans on the sandbox start path (#10536)
nickyleach Jul 31, 2026
075951f
Fix import completion UX: inbox flood, false-failure message, stale c…
devinfoley Jul 31, 2026
dd1a7f5
Ensure app-home ownership before the privilege drop, not only on rema…
devinfoley Jul 31, 2026
6a3cbe1
fix(ui): load the full selected timeline window (#9576)
cryppadotta Jul 31, 2026
4813ed3
fix(db): harden embedded Postgres test start with bounded retry (#10540)
nickyleach Jul 31, 2026
70816c1
feat(daytona): add advisory bwrap command builder and capability prob…
nickyleach Jul 31, 2026
8c910b9
feat(daytona): activate the advisory bwrap wrapper at the execute sea…
nickyleach Jul 31, 2026
131d476
fix(ci): make PR-template inline-description contract explicit (#10558)
nickyleach Jul 31, 2026
b4a7a12
feat: make recovery updates quieter (#10542)
cryppadotta Jul 31, 2026
bec04da
fix(ui): make task header status and priority controls interactive (#…
cryppadotta Jul 31, 2026
bd53b99
feat(gemini-local): export detectGeminiQuotaExhausted for plugin adap…
but-noah Jul 31, 2026
cd7f849
fix(recovery): preserve hand-back wake liveness (#10562)
cryppadotta Jul 31, 2026
d295251
feat(adapter-claude): add Claude Sonnet 5 to the static model fallbac…
nguyenm7 Jul 31, 2026
51bb41c
Expose the running build commit on the unauthenticated health respons…
devinfoley Jul 31, 2026
c4f6264
docs(daytona): document operator enablement for the advisory bwrap wr…
nickyleach Jul 31, 2026
277857a
chore(repo): ignore macOS AppleDouble metadata files (#4720)
myaji35 Jul 31, 2026
b01f423
fix(server): export manual OpenTelemetry spans (#10565)
nickyleach Jul 31, 2026
521271e
build: bake the build commit into published images (#10566)
devinfoley Jul 31, 2026
c062600
chore(lockfile): refresh pnpm-lock.yaml (#10567)
github-actions[bot] Jul 31, 2026
53bcf38
feat: sync @-mentioned projects into remote sandboxes (confined sandb…
nickyleach Jul 31, 2026
ce40343
build: publish the cloud image variant for amd64 only (#10570)
devinfoley Jul 31, 2026
2137f85
fix(ui): correct Last checked timestamp in workspace close dialog (#2…
bluzername Jul 31, 2026
54e2031
fix(ui): accessibility and cleanup for IssueWorkspaceCard copy button…
bluzername Jul 31, 2026
1ee1275
fix(adapters): persist ACPX process identity for hot restart (#9838)
cryppadotta Jul 31, 2026
ea0dd39
build: make image layer caching actually hit (#10571)
devinfoley Jul 31, 2026
2cbbad1
docs: add External Task Protocol specification (#10568)
cryppadotta Jul 31, 2026
3176e1f
chore(lockfile): refresh pnpm-lock.yaml (#10573)
github-actions[bot] Jul 31, 2026
79eff0a
fix(scripts): self-heal isolated workspace provisioning when the base…
cryppadotta Jul 31, 2026
32c1a85
fix(server): self-heal execution workspaces whose recorded branch no …
cryppadotta Jul 31, 2026
f51cba3
fix(server): keep environment secret bindings consistent when re-poin…
devinfoley Jul 31, 2026
90ead23
feat(ui/server): name cross-company environment secret refs instead o…
devinfoley Jul 31, 2026
7301fae
fix(heartbeat): atomically claim due timer intervals (#10584)
cryppadotta Aug 1, 2026
c0b875c
fix(codex): let sandbox runs use the sandbox image's own Codex login …
devinfoley Aug 1, 2026
492555a
design(decisions): flatten decision cards to two task-borrowed types …
tonio-alucema Aug 1, 2026
fc5a308
feat(cli): add managed install, update, and service lifecycle (#10045)
cryppadotta Aug 1, 2026
b1ac92f
fix(ui): recover blockquotes the markdown editor escaped as backslash…
cryppadotta Aug 1, 2026
627728b
feat: add authoritative issue PATCH receipts (#10478)
cryppadotta Aug 1, 2026
70175d5
fix(garden-inbox): preserve declined candidates on reruns (#10586)
cryppadotta Aug 1, 2026
c911668
test(installer): cover cross-version update migrations (#10587)
cryppadotta Aug 1, 2026
2e4774a
fix(adapter-utils): correct confirmation wake semantics (#10588)
cryppadotta Aug 1, 2026
a29b105
fix(server): bound inherited workspace runtime services (#10589)
cryppadotta Aug 1, 2026
86b265b
test(ui): isolate Cases routing regression (#10591)
cryppadotta Aug 1, 2026
71231df
feat(audit): agent audit UI — company page + per-agent tab (#9744)
cryppadotta Aug 1, 2026
9c1f8e7
feat(decisions): add first-class propose mode (#10010)
cryppadotta Aug 1, 2026
ee9d907
fix(codex): do not inject a duplicate --skip-git-repo-check for sandb…
devinfoley Aug 1, 2026
b163c6c
fix(server): preserve hot restart intent across path upgrade (#10593)
cryppadotta Aug 1, 2026
92c3d9f
fix(server): stop requiring PAPERCLIP_DECISION_SIGNING_SECRET at star…
cryppadotta Aug 1, 2026
6401f4f
fix(sandbox): bundle git copy-back against the merge-base so diverged…
devinfoley Aug 1, 2026
c185e64
feat(ui): chat-style task view behind an experimental flag (#10606)
scotttong Aug 1, 2026
ee851fc
feat(heartbeat): expose cache-adjusted run cost (#10349)
cryppadotta Aug 1, 2026
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
2aee071
Rebase onto upstream/master (2026-08-12): 232 commits (d5b9f6c8..6700…
claude Aug 12, 2026
0a53cea
fix(server): use assertCompanySecretWrite in secret create route
claude Aug 12, 2026
5d11d17
fix(shared): restore enableCloudSync in InstanceExperimentalSettings
claude Aug 12, 2026
2e61342
fix(db,server): restore cloud-upstream schema and enableCloudSync def…
claude Aug 12, 2026
dcce004
fix(server): fix TypeScript union narrowing in drainRunningRunsForShu…
claude Aug 12, 2026
a2ed01b
fix: restore cloud-upstream shared types, fix auth null guard and test
claude Aug 12, 2026
bf43440
fix(server): fix heartbeat drain options type narrowing for tsc
claude Aug 12, 2026
9224206
fix(server): use if/else for heartbeat drain type narrowing
claude Aug 12, 2026
95668ab
fix(server): use type assertion for heartbeat drain options narrowing
claude Aug 12, 2026
a177f0c
fix: restore all cloud-upstream/cloud-sync files removed by upstream
claude Aug 12, 2026
657d6e6
fix(db): update migration file references in tests for +3 fork offset
claude Aug 12, 2026
5867290
fix: add enableCloudSync to instance-settings test snapshot, fix useC…
claude Aug 12, 2026
deca360
fix(ui): fix AgentConfigForm, IssueProperties mock, ProjectProperties…
claude Aug 12, 2026
40eb29c
fix(ui): replace mockInstanceSettingsApi with mockAccessApi in Compan…
claude Aug 12, 2026
4beb06c
fix: wire fork features into PublicFeatureFlags, query keys, and tests
claude Aug 12, 2026
746db3d
fix(ui): fix PropertiesPanel width and IssueDetail test mocks
claude Aug 12, 2026
62db0ea
fix(ui): update PropertiesPanel test to match component grip behavior
claude Aug 12, 2026
f3779cd
fix(ui): update PropertiesPanel test - fixed-width now has maximize b…
claude Aug 12, 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