Give DeepSeek Eyes: A Zero-Dependency Skill for Screenshots in Claude Code, Codex, and Pi
Many developers have switched coding agents to DeepSeek for cost or performance but lose the ability to paste error screenshots and UI mockups. This skill restores that workflow with free infrastructure and zero new dependencies, avoiding the complexity of running a persistent local proxy.
DeepSeek's official API accepts only text, so coding agents like Claude Code, Codex, and Pi cannot process screenshots when using DeepSeek as the backend. The `glm-vision` skill splits the problem: Zhipu GLM's free Flash vision models act as the eyes, converting local images into text descriptions, while DeepSeek remains the brain for reasoning and code generation. A single Python script using only the standard library handles base64 encoding, retries with exponential backoff, and automatic fallback across a configurable model queue. The skill constrains the agent to run the script before responding, forbidding pixel hallucination. Installation is a symlink and an env file; no extra Python packages, no proxy process, and no changes to DeepSeek's authentication or network path. The trade-off is lossy compression — details the vision model misses cannot be recovered — so the query prompt must carry the user's exact task.
Separating vision and reasoning across two models is a pragmatic stopgap that works today, but it introduces a single point of descriptive failure — if GLM misreads a critical error code, DeepSeek has no way to double-check.
The design choice to forbid agent-level retry wrapping (no sleep && retry in SKILL.md) is a quiet but important constraint that prevents cascading timeouts when the vision API is already rate-limited.
Prioritizing a free model that supports local base64 at the front of the queue, and demoting an older model that only accepts public URLs to the end, reflects real-world API quirks that documentation alone wouldn't surface.