← All skills
visual-companion
80 / 100 · Low risk
Fine to try. Some of what it can do is expected: a coding skill usually runs build and test commands.
By dork-labs/dorkos (GitHub) · coding · 11 stars · scanned at commit 8c94bae
Browser-based visual companion for showing mockups, diagrams, comparisons, and interactive options. Use when the user would understand something better by seeing it than reading it.
Works with any agent that supports SKILL.md skills.
What this skill can do
Runs commands on your computer
The author does not mention this. Expected for a coding skill.
Found in 22 places.
Show 17 more
- .agents/skills/visual-companion/scripts/locate.cjs, line 8
const { execFileSync } = require('child_process'); - .agents/skills/visual-companion/scripts/locate.cjs, line 33
const top = execFileSync('git', ['rev-parse', '--show-toplevel'], { - .agents/skills/visual-companion/scripts/server.cjs, line 22
const { spawn } = require('child_process'); - .agents/skills/visual-companion/scripts/vc.cjs, line 36
const { spawn, spawnSync } = require('child_process'); - .agents/skills/visual-companion/scripts/vc.cjs, line 317
const r = spawnSync(process.execPath, args, { encoding: 'utf8', timeout: 120000 }); - .agents/skills/visual-companion/tests/09-stamp.test.cjs, line 8
const { execFileSync } = require('child_process'); - .agents/skills/visual-companion/tests/09-stamp.test.cjs, line 163
const cli = execFileSync( - .agents/skills/visual-companion/tests/09-stamp.test.cjs, line 185
execFileSync(process.execPath, [STAMP, '--dir', src, '--out', path.join(d, 'out')], { - .agents/skills/visual-companion/tests/09-stamp.test.cjs, line 266
execFileSync(process.execPath, [STAMP, '--dir', path.join(d, 'src'), '--out', out], { - .agents/skills/visual-companion/tests/09-stamp.test.cjs, line 279
if (f.endsWith('.js')) execFileSync(process.execPath, ['--check', path.join(out, f)]); - .agents/skills/visual-companion/tests/17-loopback.test.cjs, line 8
const { spawnSync } = require('child_process'); - .agents/skills/visual-companion/tests/17-loopback.test.cjs, line 15
return spawnSync(process.execPath, [SERVER], { - .agents/skills/visual-companion/tests/18-host.test.cjs, line 13
const { spawn } = require('child_process'); - .agents/skills/visual-companion/tests/lib.cjs, line 6
const { spawnSync } = require('child_process'); - .agents/skills/visual-companion/tests/lib.cjs, line 68
const r = spawnSync(process.execPath, [VC, ...args, '--project-dir', dir], { - .agents/skills/visual-companion/tests/lib.cjs, line 169
const r = spawnSync( - apps/server/src/routes/admin.ts, line 1
import { spawn } from 'child_process';
and 2 more places
Connects to the internet
The author does not mention this.
Found in 50 places.
Show 17 more
- .agents/skills/visual-companion/scripts/helper.js, line 1111
ws = new WebSocket(url); - .agents/skills/visual-companion/scripts/review.js, line 206
fetch(new URL(s.url, location.href)) - .agents/skills/visual-companion/scripts/review.js, line 702
return fetch(new URL('vc/event', vcBase()), { - .agents/skills/visual-companion/scripts/review.js, line 761
const r = await fetch(pinsUrl(), { cache: 'no-store' }); - .agents/skills/visual-companion/scripts/review.js, line 1760
const r = await fetch(statusUrl(), { cache: 'no-store' }); - .agents/skills/visual-companion/scripts/server.cjs, line 542
const res = await fetch(r.dorkos + '/api/sessions/' + encodeURIComponent(r.session), { - .agents/skills/visual-companion/scripts/server.cjs, line 819
const res = await fetch(url, { method: 'POST', headers, body: JSON.stringify(body) }); - .agents/skills/visual-companion/scripts/vc.cjs, line 169
const req = http.get( - .agents/skills/visual-companion/scripts/vc.cjs, line 653
const req = http.request( - .agents/skills/visual-companion/scripts/vc.cjs, line 804
const html = await (await fetch(target, { signal: AbortSignal.timeout(5000) })).text(); - .agents/skills/visual-companion/tests/01-lifecycle.test.cjs, line 44
http.get({ host: '127.0.0.1', port: p, path: '/' }, (x) => { - .agents/skills/visual-companion/tests/01-lifecycle.test.cjs, line 82
const state = await (await fetch(again.url + 'vc/state')).json(); - .agents/skills/visual-companion/tests/01-lifecycle.test.cjs, line 96
assert.equal((await fetch(first.url + 'vc/health')).status, 200); - .agents/skills/visual-companion/tests/01-lifecycle.test.cjs, line 125
const poller = setInterval(() => fetch(r.url + 'vc/state').catch(() => {}), 200); - .agents/skills/visual-companion/tests/02-reload.test.cjs, line 75
const up = http.request( - .agents/skills/visual-companion/tests/15-token-replay.test.cjs, line 93
const req = http.request( - .agents/skills/visual-companion/tests/15-token-replay.test.cjs, line 130
const r = await fetch(base + 'vc/event', {
and 30 more places
Reads your saved credentials, such as SSH keys or .env files
This is disclosed by the author in the skill's SKILL.md or README.
Found in 1 place.
Install
Paste this into your terminal. It downloads exactly the version we scanned, not whatever is newest.
if [ -e ~/.agents/skills/'visual-companion' ] || [ -L ~/.agents/skills/'visual-companion' ]; then echo 'A skill folder named visual-companion already exists — not replacing it' >&2; false; else d=$(mktemp -d) && git clone --quiet --filter=blob:none --no-checkout 'https://github.com/dork-labs/dorkos' "$d" && git -C "$d" checkout --quiet '8c94bae4be09f67711c27e031255f93b7540019c' -- '.agents/skills/visual-companion' && mkdir -p ~/.agents/skills && cp -R "$d"/'.agents/skills/visual-companion' ~/.agents/skills/'visual-companion' && rm -rf "$d"; fi
Codex reads ~/.agents/skills directly. For Claude Code, Cursor, Copilot, Gemini CLI, Antigravity or OpenCode, also link it. For Claude Code: ln -s ~/.agents/skills/'visual-companion' ~/.claude/skills/'visual-companion' (other agents: ~/.cursor/skills, ~/.copilot/skills, ~/.gemini/skills, ~/.gemini/config/skills, ~/.config/opencode/skills). Or install through the finder skill, which does both.
Badge for your README
The badge for dork-labs/dorkos shows the score of its lowest-scoring skill.

[](https://zalavijaysinh.github.io/skilltrust/repos/dork-labs/dorkos/)
Score history
| Date | Version | Score |
|---|
| 2026-11-12 | 8c94bae | 80 |
| 2026-11-08 | 8d6948a | 80 |