Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add dork-labs/dorkos --skill visual-companiongit clone --depth 1 https://github.com/dork-labs/dorkosWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/dork-labs/dorkos/visual-companion)<a href="https://agentmods.dev/skills/dork-labs/dorkos/visual-companion"><img src="https://agentmods.dev/badge/skills/dork-labs/dorkos/visual-companion/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/dork-labs/dorkos/visual-companion"><img src="https://agentmods.dev/badge/skills/dork-labs/dorkos/visual-companion.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00036 | $0.05413 |
| Opus 5.5 | $0.00014 | $0.02165 |
| Sonnet 5.5 | $0.00007 | $0.01083 |
| Haiku 4.5 | $0.00004 | $0.00541 |
Grade A, and why
visual-companion scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 16d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 373 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Visual companion
A small local server that shows HTML screens in the DorkOS frame (DorkOS tokens, both themes, history, pin notes) on the DorkOS canvas. You write a screen; it appears; what the person does there comes back to you.
Use it when the answer is visual: layouts, mockups, motion, side-by-side directions, diagrams. Stay in chat when the answer is words: scope, trade-offs, concepts. For a quick pick between a few labelled choices, a dorkos-ui widget in chat is lighter (its buttons give you a turn directly). Use the companion when the choice needs to be seen.
All commands below are scripts/vc in this skill. Each prints one JSON object.
The loop
- Show a screen. Write a fragment to a temp file, then:
This starts the server if needed (on the port this session had last, else a free one; it never touches another process), writes the screen, and returnsscripts/vc show /tmp/layout.html # add --wake to let a Send reach youurl,screen,screen_urlandshots(light and dark PNGs you can Read to check your own work). Run it from your project root, or pass--project-dir. - Open it on the canvas. The first time, or whenever the canvas lost it:
control_ui→browser_navigatewithurl. Never ask the person to open a URL. In a room, passtarget: { roomId }so it lands on the room's canvas. Once it's open, later screens arrive by themselves (WebSocket, falling back to polling through the preview proxy). There's no need to navigate again. - Say one line in chat about what's on screen and what you want from it.
- Read what happened. Feedback arrives in chat. Structured detail is in
scripts/vc events(only what's new since your last read). - Iterate with a new screen (
layout-v2.html). Names are never reused;vc showadds-2,-3if needed. When the conversation moves on, show a short "Back in chat" screen so a settled choice doesn't linger.
Check it's alive on every turn before relying on it: scripts/vc status
(running: false → the next vc show restarts it with the same screens,
history and port; re-open the canvas if a screen doesn't appear). It stops
itself after 4 hours idle (vc start --idle 30m to change; polls from an open
tab don't count).
What ships with it
46 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- examples/components.html 4.5 KB
- examples/prototype/build.json 54 B
- examples/prototype/src/app.js 3.0 KB runs code
- examples/prototype/src/data.js 687 B runs code
- examples/prototype/src/head.html 1.6 KB
- examples/prototype/src/style.css 5.5 KB
- references/wake-path.md 7.4 KB
- scripts/babel-plugin-data-src.cjs 2.0 KB runs code
- scripts/boot.js 1.8 KB runs code
- scripts/build-assets.mjs 5.5 KB runs code
- scripts/build-proto.cjs 2.4 KB runs code
- scripts/crop.cjs 5.4 KB runs code
- scripts/director.js 20 KB runs code
- scripts/frame-template.html 764 B
- scripts/frame.css 33 KB
- scripts/helper.js 65 KB runs code
- scripts/locate.cjs 6.1 KB runs code
- scripts/review-store.cjs 3.0 KB runs code
- scripts/review.js 80 KB runs code
- scripts/server.cjs 57 KB runs code
- scripts/shoot.cjs 2.5 KB runs code
- scripts/stamp-src.cjs 14 KB runs code
- scripts/start-server.sh 4.7 KB runs code
- scripts/stop-server.sh 1.3 KB runs code
- scripts/vc 155 B
- scripts/vc.cjs 30 KB runs code
- tests/01-lifecycle.test.cjs 4.5 KB runs code
- tests/02-reload.test.cjs 5.6 KB runs code
- tests/03-events.test.cjs 9.8 KB runs code
- tests/04-components.test.cjs 11 KB runs code
- tests/05-shots.test.cjs 3.2 KB runs code
- tests/06-a11y.test.cjs 9.8 KB runs code
- tests/07-routing.test.cjs 2.3 KB runs code
- tests/08-review-fixes.test.cjs 11 KB runs code
- tests/09-stamp.test.cjs 12 KB runs code
- tests/10-review.test.cjs 7.6 KB runs code
- tests/11-director.test.cjs 13 KB runs code
- tests/12-host-frame.test.cjs 6.6 KB runs code
- tests/13-reply-budget.test.cjs 4.0 KB runs code
- tests/14-send-lifecycle.test.cjs 10 KB runs code
- tests/15-token-replay.test.cjs 11 KB runs code
- tests/16-lifecycle.test.cjs 4.3 KB runs code
- tests/17-loopback.test.cjs 1.0 KB runs code
- tests/18-host.test.cjs 19 KB runs code
- tests/lib.cjs 6.3 KB runs code
- tests/run.sh 621 B runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 16d ago Changed · +114 lines f19219223022
- 17d ago Changed · -61 lines 0f4e94ce1b5d
- 2mo ago First seen · 320 lines · 36 tokens per session scan A 6c914b29b73e
visual-companion is a skill published in the GitHub repository dork-labs/dorkos (12 stars, last pushed today), licensed MIT. It adds 36 tokens to every session and 5,413 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
remote-screenshot
Take a real screenshot of a running Neovim from inside the Claude Code on the web container, which has no X server. Use when asked to show what a UI change looks like, or to attach an image of the chat buffer, a split layout, an approval prompt or a picker. Requires CLAUDECODEREMOTE=true — on a local machine there is…
design-system
Use when a ticket needs a systematic token + component foundation for a frontend — the three-layer token architecture (primitive → semantic → component), W3C DTCG design-token files, theming and dark mode, component specs with full state coverage, or a recommendation for which design system a product should have.…
brand
Use to establish or audit a product's brand so the factory's output looks intentional, not template — when a ticket asks to "create a brand", "define the design system / visual identity / palette / typography", or when delivered UI looks generic and needs a deliberate direction. Detects existing brand and extends it…
frontend-design
Use when a ticket builds or reworks a user-facing frontend surface — a hero, landing page, dashboard, marketing section, or any screen where the visual quality matters, not just the markup. Produces distinctive, intentional, production-grade UI that avoids generic template aesthetics. Invoke for "build the landing…
mobile-ui
Use when a ticket builds or reworks UI in a React Native / Expo (or React + Capacitor) mobile app and it must feel like a real, store-credible native app — not a wrapped mobile website. Covers the native-feel bar, safe areas and edge-to-edge, gestures and back navigation, haptics, Dynamic Type and screen readers…
frontend-a11y
Use when a ticket requires accessibility work or when delivering UI that must be usable by everyone — keyboard navigation, screen-reader labelling, focus management, colour contrast, target size, or reduced-motion support to WCAG 2.2 AA. Invoke for "make X accessible", "fix the a11y issues", "add keyboard support", or…