claude-code - 💡(How to fix) Fix [BUG] SSH session startup: 13+ min per-session delay from sequential per-file plugin sync + no UI toggle for bundled Anthropic skills [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#52072Fetched 2026-04-23 07:37:18
View on GitHub
Comments
0
Participants
1
Timeline
5
Reactions
0
Participants
Timeline (top)
labeled ×5

Starting a new SSH session to a remote host takes 13–20 minutes to receive the first assistant response. Deep log analysis proves the time is spent in [RemotePluginSync] pushing 293 skill files one-by-one via SFTP to a fresh hash-named directory on every session — even when the content is byte-identical to existing copies on the remote.

A second, compounding bug: the Claude Code desktop "Skills" UI only lists skills where creatorType !== "anthropic". Bundled skills (xlsx, pptx, docx, pdf, schedule, setup-cowork, consolidate-memory) are enabled: true in manifest.json but have no UI toggle, so users cannot disable them to reduce sync volume.

Error Message

2026-04-22 20:50:00 [error] [SkillsPlugin] Sync failed:

Error Messages/Logs

Root Cause

~84% improvement. But the workaround required bypassing Windows ACLs (icacls deny) because SkillsPlugin polls every 10 min and re-downloads the skills, flipping enabled: true back on. Log confirms ongoing fight:

2026-04-22 20:50:00 [error] [SkillsPlugin] Sync failed:
  EPERM: operation not permitted, open '...\manifest.json'

Fix Action

Fix / Workaround

1. 13+ min query= in CCD start-timing (before any workaround)

6. Impact measurement after workaround

MetricBeforeAfter workaround
query=791,352 ms120,907 ms
Files synced29328
Total to first response13 min 17 sec2 min 6 sec

Code Example

2026-04-22 20:20:03 [info] [CCD start-timing] local_24cd73b5-...
  preflight=5ms worktree=0ms mcp=3ms
  query=791352ms enqueue=7ms init=3760ms first_assistant=2094ms
  | ccd_overhead=791360ms total_to_init=795127ms total_to_assistant=797221ms

---

2026-04-22 20:19:35 [info] [RemotePluginSync] Synced 293 file(s) from
  C:\Users\...\skills-plugin\...\f9eca4c7-...\skills
/home/user/.claude/remote/plugins/15e539efb77a9cc7

2026-04-22 20:19:58 [info] [RemotePluginSync] Synced 293 file(s) from (same path)
/home/user/.claude/remote/plugins/15e539efb77a9cc7

---

2026-04-22 12:52  anthropic-skills  2bbe092247639f09
2026-04-22 13:28  anthropic-skills  c5d0151024a4a42d
2026-04-22 13:41  anthropic-skills  7f359546736e1774
2026-04-22 15:32  anthropic-skills  79d0f7f734ca27ea
2026-04-22 15:51  anthropic-skills  addac1661d0d0e61
2026-04-22 16:20  anthropic-skills  d9aca3ae63f1a098
2026-04-22 16:20  anthropic-skills  4873f521e3b18271
2026-04-22 16:29  anthropic-skills  05d5252d44236f9f
2026-04-22 16:35  anthropic-skills  03bafb393abfa8e2

---

{ "skillId": "skill-creator",       "creatorType": "anthropic", "enabled": true },
{ "skillId": "xlsx",                "creatorType": "anthropic", "enabled": true },
{ "skillId": "pptx",                "creatorType": "anthropic", "enabled": true },
{ "skillId": "pdf",                 "creatorType": "anthropic", "enabled": true },
{ "skillId": "docx",                "creatorType": "anthropic", "enabled": true },
{ "skillId": "schedule",            "creatorType": "anthropic", "enabled": true },
{ "skillId": "setup-cowork",        "creatorType": "anthropic", "enabled": true },
{ "skillId": "consolidate-memory",  "creatorType": "anthropic", "enabled": true }

---

2026-04-22 20:50:00 [error] [SkillsPlugin] Sync failed:
  EPERM: operation not permitted, open '...\manifest.json'

---
RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • I am using the latest version of Claude Code

What's Wrong?

Bug: Claude Code SSH session startup takes 13+ min due to per-file plugin sync and bundled-skill UI gap

Title (copy to GitHub)

[Bug] SSH session startup: 13+ min per-session delay from sequential per-file plugin sync + no UI toggle for bundled Anthropic skills

Environment

  • Client: Claude Code desktop, Windows 11, Electron-based
  • Client version: 2.1.117 (per main.log User-Agent)
  • Remote CLI: ccd-cli 2.1.111 deployed to remote
  • Remote host: Ubuntu Linux over SSH, ~250ms RTT from client
  • Measured link: 7 Mbps upload via scp, confirmed by ssh.log SFTP progress (0.83 MB/s)

Summary

Starting a new SSH session to a remote host takes 13–20 minutes to receive the first assistant response. Deep log analysis proves the time is spent in [RemotePluginSync] pushing 293 skill files one-by-one via SFTP to a fresh hash-named directory on every session — even when the content is byte-identical to existing copies on the remote.

A second, compounding bug: the Claude Code desktop "Skills" UI only lists skills where creatorType !== "anthropic". Bundled skills (xlsx, pptx, docx, pdf, schedule, setup-cowork, consolidate-memory) are enabled: true in manifest.json but have no UI toggle, so users cannot disable them to reduce sync volume.

Evidence

1. 13+ min query= in CCD start-timing (before any workaround)

From %APPDATA%\Claude\logs\main.log:

2026-04-22 20:20:03 [info] [CCD start-timing] local_24cd73b5-...
  preflight=5ms worktree=0ms mcp=3ms
  query=791352ms enqueue=7ms init=3760ms first_assistant=2094ms
  | ccd_overhead=791360ms total_to_init=795127ms total_to_assistant=797221ms

query=791352ms = 13 min 11 sec purely on plugin sync, before Claude even starts. init and first_assistant (together ~6 sec) prove Claude itself is fast; the bottleneck is entirely pre-session.

2. Per-file SFTP serialization (no batching, no delta)

From ssh.log:

2026-04-22 20:19:35 [info] [RemotePluginSync] Synced 293 file(s) from
  C:\Users\...\skills-plugin\...\f9eca4c7-...\skills
  → /home/user/.claude/remote/plugins/15e539efb77a9cc7

2026-04-22 20:19:58 [info] [RemotePluginSync] Synced 293 file(s) from (same path)
  → /home/user/.claude/remote/plugins/15e539efb77a9cc7

Measured directly from remote file mtimes: 248 files in one plugin dir took 5 min 13 sec = ~0.8 files/sec = ~1.25 sec per file regardless of size. This matches ~3 RTT per file at 250ms (create/write/close/setstat via SFTP).

3. New hash-directory per session (content not reused)

After one day of use on a single client+remote pair, ~/.claude/remote/plugins/ contained 10 duplicate copies of the same anthropic-skills v1.0.0 bundle (9.7 MB each, 96 MB total waste). Each session generates a different hash-named dir even though bundle content is identical:

2026-04-22 12:52  anthropic-skills  2bbe092247639f09
2026-04-22 13:28  anthropic-skills  c5d0151024a4a42d
2026-04-22 13:41  anthropic-skills  7f359546736e1774
2026-04-22 15:32  anthropic-skills  79d0f7f734ca27ea
2026-04-22 15:51  anthropic-skills  addac1661d0d0e61
2026-04-22 16:20  anthropic-skills  d9aca3ae63f1a098
2026-04-22 16:20  anthropic-skills  4873f521e3b18271
2026-04-22 16:29  anthropic-skills  05d5252d44236f9f
2026-04-22 16:35  anthropic-skills  03bafb393abfa8e2

Hash appears to be session/install-id based, not content-hash based.

4. Bundled Anthropic skills cannot be disabled from UI

manifest.json contains 8 skills with enabled: true:

{ "skillId": "skill-creator",       "creatorType": "anthropic", "enabled": true },
{ "skillId": "xlsx",                "creatorType": "anthropic", "enabled": true },
{ "skillId": "pptx",                "creatorType": "anthropic", "enabled": true },
{ "skillId": "pdf",                 "creatorType": "anthropic", "enabled": true },
{ "skillId": "docx",                "creatorType": "anthropic", "enabled": true },
{ "skillId": "schedule",            "creatorType": "anthropic", "enabled": true },
{ "skillId": "setup-cowork",        "creatorType": "anthropic", "enabled": true },
{ "skillId": "consolidate-memory",  "creatorType": "anthropic", "enabled": true }

The Customize → Skills → "Personal skills" panel in Claude Code desktop shows only skill-creator. The other 7 bundled skills have no toggle. xlsx/pptx/docx/pdf alone add 186 files (~3.9 MB) that sync on every session.

5. Orphaned skill directories sync anyway

canvas-design (83 files) and doc-coauthoring (1 file) exist in the local skills-plugin/skills/ directory but are not listed in manifest.json. RemotePluginSync walks the directory tree, so it pushes these too. Total: 293 files synced vs 8 skills declared enabled.

6. Impact measurement after workaround

Manually editing manifest.json (setting enabled: false on 4 heavy skills), deleting their local dirs, and creating read-only placeholder files to block mkdir-recreation:

MetricBeforeAfter workaround
query=791,352 ms120,907 ms
Files synced29328
Total to first response13 min 17 sec2 min 6 sec

~84% improvement. But the workaround required bypassing Windows ACLs (icacls deny) because SkillsPlugin polls every 10 min and re-downloads the skills, flipping enabled: true back on. Log confirms ongoing fight:

2026-04-22 20:50:00 [error] [SkillsPlugin] Sync failed:
  EPERM: operation not permitted, open '...\manifest.json'

Requested fixes (priority order)

  1. Use content-addressable plugin directories on the remote. Hash by bundle content (skill set + versions), not by session. Identical content should reuse an existing ~/.claude/remote/plugins/<content-hash>/ dir with zero file transfer. This alone would drop 95%+ of the recurring cost.

  2. Batch file transfer with tar + streaming. Per-file SFTP at high RTT is catastrophic. A single tar | ssh pipe (optionally gzipped) would transfer 293 files in seconds instead of 5+ minutes.

  3. Implement delta sync. Check remote file hashes/mtimes and only push changed files. SkillsPlugin already does delta sync against the Anthropic API (Delta: 0 to download); RemotePluginSync should do the same against the SSH remote.

  4. Expose bundled Anthropic skills in the Skills UI with toggles. Users have no way to opt out of xlsx/pptx/docx/pdf via the supported UI. At minimum, add them to a "Built-in" / "Bundled" section alongside "Personal skills".

  5. Sync only enabled: true skills, not the full directory tree. Orphaned directories (no manifest entry) should be ignored or cleaned up, not pushed.

  6. Add a setting to disable auto-sync or make it manual/triggered. For users on high-latency links, the 10-min periodic SkillsPlugin sync + fresh per-session RemotePluginSync is a recurring tax they can't opt out of.

Repro steps

  1. Install Claude Code desktop on Windows (or macOS).
  2. Configure an SSH host with >200ms RTT to your machine (or use a geographically distant VPS).
  3. Open a new session targeting that SSH host, working dir on the remote.
  4. Measure time from "send first message" to "first assistant response".
  5. Inspect %APPDATA%\Claude\logs\main.log — look for [CCD start-timing] and note query= ms.
  6. Inspect %APPDATA%\Claude\logs\ssh.log — look for [RemotePluginSync] Synced N file(s) and note N.

With default bundled skills, expect query= > 500,000 ms and N ≥ 250.

Additional context

  • Anthropic-skills bundle version in use: 1.0.0
  • Remote server binary: claude-ssh 9a871e263f5ad85fb147f437ce5f11a5450ef3e8 (built 2026-04-21T17:07:27Z)
  • ccd-cli binary size: 225 MB (one-time SFTP upload on version change — also slow but at least infrequent)
  • Historical handshake timeouts observed in ssh.log up to 213,625,944 ms (59 hours) — likely a separate issue but worth investigating timeout ceilings.

What Should Happen?

time to start session should be less than 30 sec

Error Messages/Logs

Steps to Reproduce

check description

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

No response

Claude Code Version

2.1.111

Platform

Anthropic API

Operating System

Ubuntu/Debian Linux

Terminal/Shell

Other

Additional Information

No response

extent analysis

TL;DR

To fix the 13+ minute SSH session startup delay, implement content-addressable plugin directories on the remote, batch file transfer, and expose bundled Anthropic skills in the Skills UI with toggles.

Guidance

  1. Use content-addressable plugin directories: Hash plugin directories by bundle content instead of session, to reuse existing directories and reduce file transfers.
  2. Batch file transfer: Use tar and streaming to transfer files in seconds instead of minutes, reducing the overhead of per-file SFTP transfers.
  3. Expose bundled Anthropic skills in the Skills UI: Add toggles for bundled skills, allowing users to opt out of syncing unnecessary skills and reduce the overall sync volume.
  4. Implement delta sync: Check remote file hashes and mtimes to only push changed files, reducing the amount of data transferred during sync.
  5. Sync only enabled skills: Ignore or clean up orphaned directories without manifest entries to prevent unnecessary file transfers.

Example

No code snippet is provided as the issue is more related to the design and implementation of the plugin sync and UI features.

Notes

The provided information suggests that the issue is caused by the sequential per-file plugin sync and the lack of UI toggles for bundled skills. The proposed fixes aim to address these root causes and reduce the startup delay.

Recommendation

Apply the proposed workarounds, starting with implementing content-addressable plugin directories and batch file transfer, to significantly reduce the startup delay.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix [BUG] SSH session startup: 13+ min per-session delay from sequential per-file plugin sync + no UI toggle for bundled Anthropic skills [1 participants]