paperclipai/paperclip
The open-source app everyone uses to manage agents at work
The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
Most complex files
- packages/paperclip-runner/src/protocol/generated/standalone-validators.ts6368 cx
- server/src/services/tool-access.ts3731 cx
- server/src/routes/issues.ts3392 cx
- server/src/services/native-runtime/native-session-executor.ts2964 cx
- server/src/services/issues.ts2371 cx
- server/src/services/company-portability.ts2113 cx
- server/src/services/company-skills.ts1940 cx
- ui/src/pages/IssueDetail.tsx1832 cx
- packages/plugins/plugin-llm-wiki/src/ui/app.tsx1805 cx
- server/src/services/workspace-runtime.ts1786 cx
Dead code 2.88% unused · 745 findings
- packages/plugins/plugin-llm-wiki/src/ui/app.tsxunused-file
- packages/plugins/plugin-llm-wiki/src/wiki/core.tsunused-file
- doc/plans/2026-05-23-cli-api-parity-openapi-reference.tsunused-file
- server/src/services/chat-sdk-runtime.tsunused-file
- doc/plans/chat-adapters/setup-wireframe-data-v5.mjsunused-file
- server/src/services/chat-teams-file-consent.tsunused-file
- server/src/services/chat-teams-file-transfers.tsunused-file
- packages/plugins/plugin-llm-wiki/src/worker.tsunused-file
- packages/paperclip-runner/src/protocol/generated/schema-bundle.ts:providerEventSchemaunused-export
- doc/plans/chat-adapters/generate-wireframes-v8.mjsunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 8 generated files: packages/paperclip-runner/runner/crates/runner-core/src/generated_acpx_sidecar_contract.rs, packages/paperclip-runner/src/drivers/acpx/generated-sidecar-contract.ts, packages/paperclip-runner/src/generated/capability-contract.ts, packages/paperclip-runner/src/mock-core/skill-frontmatter.generated.ts, packages/paperclip-runner/src/protocol/generated/schema-bundle.ts, packages/paperclip-runner/src/protocol/generated/standalone-validators.ts, packages/shared/src/cliplab/character.ts, packages/shared/src/telemetry/generated/paperclip-telemetry.ts.
Largest clones in the code
- 1048 lines in 2 placestsx6,783 tokens
2319emptyMessage={eligible.length === 0 ? "No agents in this company support skills yet." : "No agents yet."} 2320isAgentDisabled={(agent) => { 2321 const option = agent as AttachAgentOption; 2322 return option.required || !option.supportsSkills; 2323}} 2324getDescription={(agent) => { 2325 const option = agent as AttachAgentOption; 2326 return `${option.adapterType}${option.required ? " · required" : ""}${!option.supportsSkills ? " · skills not supported" : ""}`; 2327}} 2328renderNameSuffix={(agent) => (agent as AttachAgentOption).paused ? (First 10 of 1048 lines.
- 657 lines in 2 placestsx4,344 tokens
3714 <ScrollToBottom /> 3715 </div> 3716 ); 3717} 3718 3719/* ---- Log Viewer ---- */ 3720 3721export function LogViewer({ run, adapterType }: { run: HeartbeatRun; adapterType: string }) { 3722 const { visible } = usePageVisibility(); 3723 const [events, setEvents] = useState<HeartbeatRunEvent[]>([]);First 10 of 657 lines.
- 622 lines in 2 placestsx4,223 tokens
1710 [selectedCompanyId, visibleIssueColumns], 1711); 1712const updateIssueFilters = useCallback((patch: Partial<IssueFilterState>) => { 1713 updateFilterPreferences((previous) => ({ 1714 ...previous, 1715 issueFilters: { ...previous.issueFilters, ...patch }, 1716 })); 1717}, [updateFilterPreferences]); 1718useEffect(() => { 1719 if (!experimentalSettingsLoaded || externalObjectsEnabled || issueFilters.externalObjectStatuses.length === 0) return;First 10 of 622 lines.
7 more
- 586 lines in 2 placestsx4,033 tokens
- 619 lines in 2 placestsx3,874 tokens
- 590 lines in 2 placestsx3,620 tokens
- 512 lines in 2 placestsx3,520 tokens
- 425 lines in 2 placestsx2,881 tokens
- 400 lines in 2 placestsx2,771 tokens
- 367 lines in 2 placestsx2,523 tokens
Largest clones over all files, tests and data included
- 1287 lines in 2 placesmarkdowndocs and examples9,203 tokensskills-releases/paperclip/v0/references/api-reference.md:1–1287skills-releases/paperclip/v7-roster/references/api-reference.md:1–1287
1# Paperclip API Reference 2 3Detailed reference for the Paperclip control plane API. For the core heartbeat procedure and critical rules, see the main `SKILL.md`. 4 5--- 6 7## Response Schemas 8 9### Agent Record (`GET /api/agents/me` or `GET /api/agents/:agentId`) 10First 10 of 1287 lines.
- 1048 lines in 2 placestsx6,783 tokens
2319emptyMessage={eligible.length === 0 ? "No agents in this company support skills yet." : "No agents yet."} 2320isAgentDisabled={(agent) => { 2321 const option = agent as AttachAgentOption; 2322 return option.required || !option.supportsSkills; 2323}} 2324getDescription={(agent) => { 2325 const option = agent as AttachAgentOption; 2326 return `${option.adapterType}${option.required ? " · required" : ""}${!option.supportsSkills ? " · skills not supported" : ""}`; 2327}} 2328renderNameSuffix={(agent) => (agent as AttachAgentOption).paused ? (First 10 of 1048 lines.
- 1014 lines in 2 placesmarkdowndocs and examples4,926 tokensdoc/plans/2026-03-13-workspace-product-model-and-work-product.md:1–1014doc/plans/workspace-product-model-and-work-product.md:1–1014
1# Workspace Product Model, Work Product, and PR Flow 2 3## Context 4 5Paperclip needs to support two very different but equally valid ways of working: 6 7- a solo developer working directly on `master`, or in a folder that is not even a git repo 8- a larger engineering workflow with isolated branches, previews, pull requests, and cleanup automation 9 10Today, Paperclip already has the beginnings of this model:First 10 of 1014 lines.
- 657 lines in 2 placestsx4,344 tokens
- 622 lines in 2 placestsx4,223 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 2,254 | 779,704 | 3,331 | 43,684 | 5.6% |
| tsx | 873 | 350,193 | 1,030 | 33,144 | 9.46% |
| rust | 34 | 53,932 | 260 | 3,021 | 5.6% |
| javascript | 181 | 31,979 | 60 | 803 | 2.51% |
| bash | 56 | 12,144 | 36 | 1,123 | 9.25% |
| perl | 1 | 174 | 0 | 0 | 0% |
| python | 1 | 96 | 0 | 0 | 0% |
| go | 2 | 69 | 0 | 0 | 0% |
| c | 1 | 64 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 4,374 | 1,594,112 | 13,011 | 181,115 | 11.36% |
| tsx | 1,284 | 504,720 | 3,208 | 61,365 | 12.16% |
| rust | 56 | 69,142 | 460 | 5,410 | 7.82% |
| json | 283 | 41,462 | 313 | 8,512 | 20.53% |
| markdown | 594 | 138,814 | 228 | 9,143 | 6.59% |
| javascript | 319 | 58,815 | 152 | 1,956 | 3.33% |
| diff | 13 | 7,299 | 102 | 1,306 | 17.89% |
| yaml | 74 | 20,218 | 93 | 1,681 | 8.31% |
| bash | 183 | 16,340 | 60 | 1,622 | 9.93% |
| css | 12 | 9,796 | 44 | 351 | 3.58% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 30, 2026 | #3 | 94,702 (+2,458) | 7,560 | 2,479,649 | 17,754 | 11.04% | 6.66% | D 48.3 | a027f76 |
| Sep 29, 2026 | #2 | 93,243 (+3,197) | 7,474 | 2,457,533 | 17,686 | 11.11% | 6.7% | D 48.2 | 53aad90 |
| Sep 28, 2026 | #1 | 90,561 (+2,401) | 7,363 | 2,435,919 | 17,609 | 11.19% | 6.75% | D 48.1 | 0f14d26 |
| Sep 27, 2026 | #1 | 87,754 (+2,608) | 7,361 | 2,435,023 | 17,605 | 11.19% | 6.75% | D 48.1 | 640dee1 |
| Sep 26, 2026 | #1 | 85,320 (+2,109) | 7,356 | 2,433,975 | 17,586 | 11.2% | 6.76% | D 48.1 | 4ca404b |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.