fix-orbstack-docker-pull
Diagnose and fix Docker image pull failures on macOS with OrbStack, especially Docker Hub EOF/TLS/manifest errors caused by system proxies, Clash/CyberClash/Mihomo/Surge-style TUN mode, fake-ip DNS such as 198.18.0.x, or unstable registry access. Use when `docker pull` or `docker manifest inspect` fails with EOF, SSL_ERROR_SYSCALL, failed to fetch anonymous token, failed to resolve reference, failed to copy, or registry-1.docker.io/auth.docker.io connectivity confusion.
What this skill does
# Fix OrbStack Docker Pull
## Core Rule
Treat Docker Hub `EOF` on OrbStack as a network path problem until proven otherwise. Do not assume the image is missing, private, or platform-incompatible before testing a small public image and the daemon's proxy path.
Expected responses that are not failures:
- `curl -I https://auth.docker.io` returning `HTTP/2 404` is normal for the auth service root.
- `curl -I https://registry-1.docker.io` returning `HTTP/2 404` is normal for the registry root.
- `curl -I https://registry-1.docker.io/v2/` returning `401` with `www-authenticate: Bearer ...` is the expected unauthenticated registry response.
Suspicious signals:
- `docker pull hello-world:latest` fails with `Head "https://registry-1.docker.io/v2/.../manifests/latest": EOF`.
- `docker buildx imagetools inspect` or `docker manifest inspect` fails while explicit `curl -x http://127.0.0.1:<port>` succeeds.
- `registry-1.docker.io` resolves to `198.18.0.x`, which usually indicates Clash-style fake-ip/TUN routing.
- macOS has system HTTP/HTTPS proxy enabled, but OrbStack Docker daemon is still using an unstable automatic proxy path.
## Quick Diagnose
Run the bundled read-only diagnostic script first when local shell access is available:
```bash
/Users/jiamingfeng/.codex/skills/fix-orbstack-docker-pull/scripts/diagnose-orbstack-docker-pull.sh
```
If the skill has been installed elsewhere, resolve the script relative to this `SKILL.md`.
If running manually, collect these facts:
```bash
docker version
docker info
orb version
orb config get network_proxy
sed -n '1,120p' ~/.orbstack/config/docker.json
networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
dscacheutil -q host -a name registry-1.docker.io
dig registry-1.docker.io
netstat -rn -f inet | grep -E '198\\.18|default|utun'
curl -I --max-time 15 https://registry-1.docker.io/v2/
curl -x http://127.0.0.1:7890 -I --max-time 15 https://registry-1.docker.io/v2/
docker pull hello-world:latest
```
Adapt the proxy port from `networksetup`; do not hard-code `7890` unless the system proxy reports it.
## Fix Workflow
1. Confirm the issue is general:
```bash
docker pull hello-world:latest
```
If `hello-world` also fails with Docker Hub `EOF`, focus on daemon networking rather than the requested image.
2. Find the active macOS proxy:
```bash
networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
ps aux | grep -Ei 'clash|cyberclash|mihomo|sing-box|surge|stash|v2ray|xray|shadow|proxy' | grep -v grep
```
If `Server: 127.0.0.1` and `Port: 7890` appear, the proxy URL is `http://127.0.0.1:7890`. Use the actual service name if the Mac is not using `Wi-Fi`.
3. Make OrbStack use the proxy explicitly:
```bash
orb config set network_proxy http://127.0.0.1:<port>
orb restart docker
```
Verify:
```bash
orb config get network_proxy
docker pull hello-world:latest
```
4. If pulls still intermittently EOF or large layers hang, reduce Docker daemon download concurrency:
```json
{
"max-concurrent-downloads": 1
}
```
Write that JSON to `~/.orbstack/config/docker.json`, preserving any existing daemon settings. Then restart:
```bash
orb restart docker
docker pull <image>
```
5. Continue interrupted pulls instead of cleaning state:
```bash
docker pull <image>
docker system df
orb logs docker | tail -80
```
Docker often retains partially downloaded blobs after an interrupted pull. Avoid `docker system prune` unless the user explicitly wants to discard partial progress.
## Interpretation Guide
- `registry-1.docker.io` resolving to `198.18.0.x` is a fake-ip/TUN clue, not the real Docker Hub endpoint.
- `curl -x http://127.0.0.1:<port> -I https://registry-1.docker.io/v2/` succeeding while direct curl or Docker fails means the explicit proxy path is healthier than auto/TUN routing.
- `docker manifest inspect` may fail from the macOS-side client path even when `docker pull` succeeds through the daemon path; prioritize `docker pull hello-world` and the actual target pull for validation.
- A long pause during a large layer can still be normal. Check `docker system df` growth or daemon logs before killing the pull.
- If the proxy port changes after reboot, update OrbStack with the new port and restart Docker.
## Persistence
These settings persist across Mac reboots:
```bash
orb config get network_proxy
sed -n '1,120p' ~/.orbstack/config/docker.json
```
Before future pulls, the user usually only needs OrbStack and the proxy app running. If the proxy app changes port, rerun:
```bash
orb config set network_proxy http://127.0.0.1:<new-port>
orb restart docker
```
Related in Image & Video
watch
IncludedWatch a video (URL or local path). Downloads with yt-dlp, extracts auto-scaled frames with ffmpeg, pulls the transcript from captions (or Whisper API fallback), and hands the result to Claude so it can answer questions about what's in the video.
physical-ai-defect-image-generation
IncludedUse when the user wants to orchestrate defect image generation, run associated setup, or handle outputs on OSMO. The Day 0 path handles cold-start with USD-to-ROI, image-edit augmentation, and AnomalyGen to create initial PCBA datasets. The Day 1 path performs inference and labeling on real images. This skill helps with first-time asset setup, creation of finetuning checkpoints, and configuring deployment. Trigger keywords: defect image generation, dig workflow, dig pipeline, defect image detection workflow, aoi pipeline, aoi anomalygen, usd2roi anomalygen, day 0 pcba, day 1 pcba, day 1 real-photo alignment, day 1 manual roi, metal surface anomaly, glass defect, anomalygen finetune, setup_pcb, setup_metal, setup_glass, setup_pretrained, dig setup, dig datasets, dig pretrained checkpoint, dig image-edit endpoint.
accelint-react-best-practices
IncludedReact performance optimization and best practices. ALWAYS use this skill when working with any React code - writing components, hooks, JSX; refactoring; optimizing re-renders, memoization, state management; reviewing for performance; fixing hydration mismatches; debugging infinite re-renders, stale closures, input focus loss, animations restarting; preventing remounting; implementing transitions, lazy initialization, effect dependencies. Even simple React tasks benefit from these patterns. Covers React 19+ (useEffectEvent, Activity, ref props). Triggers - useEffect, useState, useMemo, useCallback, memo, inline components, nested components, components inside components, re-render, performance, hydration, SSR, Next.js, useDeferredValue, combined hooks.
elevenlabs-agents
IncludedBuild conversational AI voice agents with ElevenLabs Platform using React, JavaScript, React Native, or Swift SDKs. Configure agents, tools (client/server/MCP), RAG knowledge bases, multi-voice, and Scribe real-time STT. Use when: building voice chat interfaces, implementing AI phone agents with Twilio, configuring agent workflows or tools, adding RAG knowledge bases, testing with CLI "agents as code", or troubleshooting deprecated @11labs packages, Android audio cutoff, CSP violations, dynamic variables, or WebRTC config. Keywords: ElevenLabs Agents, ElevenLabs voice agents, AI voice agents, conversational AI, @elevenlabs/react, @elevenlabs/client, @elevenlabs/react-native, @elevenlabs/elevenlabs-js, @elevenlabs/agents-cli, elevenlabs SDK, voice AI, TTS, text-to-speech, ASR, speech recognition, turn-taking model, WebRTC voice, WebSocket voice, ElevenLabs conversation, agent system prompt, agent tools, agent knowledge base, RAG voice agents, multi-voice agents, pronunciation dictionary, voice speed control, elevenlabs scribe, @11labs deprecated, Android audio cutoff, CSP violation elevenlabs, dynamic variables elevenlabs, case-sensitive tool names, webhook authentication
humanizer
IncludedHumanize AI-generated text by detecting and removing patterns typical of LLM output. Rewrites text to sound natural, specific, and human. Uses 28 pattern detectors, 560+ AI vocabulary terms across 3 tiers, and statistical analysis (burstiness, type-token ratio, readability) for comprehensive detection. Use when asked to humanize text, de-AI writing, make content sound more natural/human, review writing for AI patterns, score text for AI detection, or improve AI-generated drafts. Covers content, language, style, communication, and filler categories.
generating-mermaid-diagrams
IncludedSalesforce architecture diagrams using Mermaid with ASCII fallback. Use this skill when generating text-based diagrams for Salesforce architecture, OAuth flows, ERDs, integration sequences, or Agentforce structure. TRIGGER when: user says "diagram", "visualize", "ERD", or asks for sequence diagrams, flowcharts, class diagrams, or architecture visualizations in Mermaid. DO NOT TRIGGER when: user wants PNG/SVG image output (use generating-visual-diagrams), or asks about non-Salesforce systems.