ModLens — Plug-in Vision for Text-Only Models
Gives text-only coding models sight: paste an image, get structured JSON evidence — OCR, layout, and semantics — via a vision bridge.
Evidence shows strong least-privilege design: allowed-tools is only Bash, config written 0600, hidden-prompt key entry avoids shell history and chat, reuse of other harness logins requires per-harness explicit consent, kimi-cli never auto-joins the failover chain to protect subscriptions, every reused read is labeled in meta.warnings, and image content is declared untrusted input. Deductions: recover-paste reads local session storage (~/.claude/projects etc.), sensitive access whose real behavior is unverified; Gemini free-tier data-use caveat is a single sentence; data-flow disclosure partially rests on docs/security.md not fully present in the evidence.
SKILL.md handles failure paths meticulously: structured exit-78 diagnosis, precise guard exit-code semantics, schema-failure retry strategy, timeout handling, 'never fabricate image content' rule; the launcher script is self-consistent (version resolution, node 22.19 floor, POSIX sh). Deductions: static review executes nothing, so the core CLI (@liustack/[email protected]) behavior is unreproduced; a test suite and 3-OS CI exist but the actual test content covering the skill's key paths is not in this evidence; behavior depends on external services and third-party CLI login states with partly unverified failure modes.
Audience and scenarios are very clear: text-only models (DeepSeek, GLM) needing vision; trigger conditions are precise (image-extension paths, [Image #1] placeholders, guard verdicts) with explicit exclusions for native-vision models and web search; a guard prevents false invocation on vision models; Chinese documentation provided. Deductions: core function depends on overseas services (Gemini, Anthropic, Antigravity) whose reachability from mainland China relies on proxy configuration, with no dedicated mainland direct-connect guidance; heavy references to future/unreleased model versions (DeepSeek-V4, GLM-5.3, August 2026) that cannot be verified.
Excellent information architecture: concise SKILL.md, layered references, bilingual docs, clear MIT license, pinned version 3.26.1 with stamp tests preventing drift, CHANGELOG-bound releases via OIDC trusted publishing, explicit single-maintainer update model. Deductions: unverified individual publisher with no institutional backing; 'no pull requests' limits community maintenance paths; referenced docs (docs/security.md, actual CHANGELOG content) not verifiable within this evidence.
The core task (image to structured JSON evidence) is fully designed: explicit OCR/layout/semantics output contract, multi-provider failover, and genuine differentiation in zero-config reuse of local logins and paste recovery. README carries multiple claimed-live demo screenshots. Deductions: static review cannot confirm output is directly usable; demos are author-supplied; marketing superlatives ('全网最强', '🥇 most capable') are uncorroborated; real effectiveness depends heavily on the configured vision model.
Considerable auditable primary material: full launcher source, layered docs, pinned version, CI workflows (3-OS matrix plus release guards), npm provenance publishing. Deductions: nothing executed; effectiveness claims (demo screenshots) not independently corroborated; references to future model names unverifiable; no evidence of actual CI runs or test coverage of the skill's key paths in this material.
- This is a static source-only review; no commands were executed, so all runtime behavior (CLI output, guard verdicts, paste recovery) is unverified.
- recover-paste reads local Claude Code / Pi / OpenCode session storage to extract pasted images; confirm you accept this local data access, and delete recovered files as the docs instruct.
- Core vision capability depends on overseas services (Gemini, Anthropic, Antigravity) that typically require a proxy from mainland China; configure proxy before enabling gemini-api and similar routes.
- Gemini free-tier data may be used by Google to improve products; for sensitive images prefer an OpenAI-compatible endpoint with your own key or another route.
- Docs reference unreleased or unverifiable model versions (DeepSeek-V4, GLM-5.3, etc.); treat those compatibility claims as unproven until observed.
- The publisher is an unverified individual who accepts no pull requests, so maintenance and security response rest on a single author; pin version 3.26.1 and note the SECURITY.md reporting channel.
What does this skill do, and when should you use it?
ModLens is an Agent Skill that converts images into structured JSON evidence so text-only models like DeepSeek and GLM flagship chat models can read what they cannot see. It runs the modlens CLI to produce full transcription, reading-order layout regions, entity/relation semantics, and honest uncertainty notes. Ten vision sources feed one automatic failover chain: six built-in providers (Gemini, any OpenAI-compatible endpoint, Anthropic, Antigravity CLI, claude-cli, kimi-cli) plus reusable logins from Codex, OpenCode, Pi, and Grok. On DeepSeek Harness it installs as a single plugin; on Claude Code, Codex, Pi, and OpenCode it is a single skill folder — no hooks, no proxy, no config edits. It is single-maintainer software that does not accept pull requests.
When an image path/URL (.png, .jpg, .jpeg, .webp, .gif, .heic, .heif) or a pasted-image placeholder like [Image #1] appears and the model cannot see the image, the skill triggers a guard check (modlens guard) to confirm the model lacks native vision, then calls modlens to send the image to a configured vision engine. It returns JSON with result.summary, result.ocr.full_text, result.layout.regions, and result.semantics; meta.attempts and meta.warnings record every engine tried and whose quota was spent. It supports -p to pin a provider, --timeout, -o output files, and --prompt focus hints, plus modlens doctor for health checks and modlens config for settings. Runtime resolution order: modlens on PATH (≥3.26.1), then npx, then bunx, with version pinned at 3.26.1.
- A developer using text-only DeepSeek flagships for coding who wants to paste screenshots, mockups, or error dialogs into chat and have the model actually read them.
- Users with existing paid subscriptions in Claude Code, Codex, Pi, or OpenCode who want to reuse that vision quota at zero extra cost.
- Users who refuse to sign up for anything: install the free Antigravity CLI as a no-key vision channel.
- Teams holding OpenAI-compatible endpoints (qwen-vl on DashScope, GLM open platform, SiliconFlow, self-hosted vLLM/Ollama) who want a unified vision pipeline.
- Anyone needing dense charts read precisely — e.g., a scatter plot with log axes — where the model must quote specifics instead of guessing.
What are this skill's strengths and limitations?
- Lightest possible footprint: one skill folder on skill harnesses, one plugin on dsh; uninstalling is deleting a folder. No hooks, no local proxy, no harness config changes.
- Zero-config start: reuses existing Claude Code, Codex, OpenCode, and Pi logins; a free Gemini key brings reads down to 5-10 seconds.
- Evidence, not imagination: full transcription, reading-order layout, entity/relation lists, explicit uncertainty flags, and a hard rule against fabricating image content.
- Ten vision sources with automatic failover; meta.attempts makes every fallback traceable and reused quota is labeled in meta.warnings.
- Requires network and an external vision service: with no key and no CLI logins it cannot work at all.
- The Antigravity CLI and agent-CLI lanes take 15-45 seconds per read, far slower than the API lanes.
- The only zero-signup option requires installing an extra tool (Antigravity CLI); reusing other harness logins needs explicit per-harness grants.
- Capability claims in the README come from the author's own unedited demos; there is no independent test suite or third-party benchmark, and the single maintainer does not accept PRs.
- It is strictly a bridge for text-only models: if the active model has native vision (e.g., GLM-5.3-Flash), the guard blocks this skill by design.
How do you install this skill?
Other harnesses: install via skills.sh with npx -y skills add liustack/modlens --skill modlens --global, restart, then ask your AI to follow the repo's INSTALL.md, configure modlens, and run the health check — or simply paste that instruction to your AI. DeepSeek Harness: npx -y @deepseek-ai/dsh plugin --profile web add @liustack/[email protected]. If the health check comes back empty, set up a free engine: a free Gemini API key (~3 minutes at Google AI Studio, no card) or Antigravity CLI for zero signup (curl -fsSL https://antigravity.google/cli/install.sh | bash, then run agy to sign in).
How do you use this skill?
Once installed, just chat: paste an image or drop a path and ask anything; the skill triggers on its own. You can also explicitly ask the AI to "read this image with modlens" or to install/switch modlens providers. Internally the loop is: modlens guard --model <id> on first read to confirm no native vision, modlens -i <path-or-url> to read the image once, then answer from the JSON summary/ocr/layout/semantics fields, quoting specifics. Later questions about the same image do not need another paste.