Dsl Vm Reverse
zhaoxuya520/reverse-skill
Reverse JavaScript-based custom DSL/VM interpreters, non-standard WASM-like runtimes, and risk-control engines.
Connect to a Windows 98 game or app that a person is running in their browser on wine-assembly, then see its screen and play it with mouse and keyboard.
$ npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vgrichina/berrry-wine wine-assembly-connect --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/vgrichina/berrry-wine.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/wine-assembly-connect .claude/skills/wine-assembly-connect && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "wine-assembly-connect" agent skill from https://github.com/vgrichina/berrry-wine/tree/main/skills/wine-assembly-connect into .claude/skills/wine-assembly-connect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wine-assembly-connect", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/vgrichina/berrry-wine/tree/main/skills/wine-assembly-connectType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vgrichina/berrry-wine wine-assembly-connect --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vgrichina/berrry-wine.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/wine-assembly-connect .agents/skills/wine-assembly-connect && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "wine-assembly-connect" agent skill from https://github.com/vgrichina/berrry-wine/tree/main/skills/wine-assembly-connect into .agents/skills/wine-assembly-connect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wine-assembly-connect", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vgrichina/berrry-wine wine-assembly-connect --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vgrichina/berrry-wine.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/wine-assembly-connect .cursor/skills/wine-assembly-connect && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "wine-assembly-connect" agent skill from https://github.com/vgrichina/berrry-wine/tree/main/skills/wine-assembly-connect into .cursor/skills/wine-assembly-connect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wine-assembly-connect", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/vgrichina/berrry-wine.git --path skills/wine-assembly-connect--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vgrichina/berrry-wine wine-assembly-connect --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vgrichina/berrry-wine.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/wine-assembly-connect .gemini/skills/wine-assembly-connect && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "wine-assembly-connect" agent skill from https://github.com/vgrichina/berrry-wine/tree/main/skills/wine-assembly-connect into .gemini/skills/wine-assembly-connect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wine-assembly-connect", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install vgrichina/berrry-wine wine-assembly-connectInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vgrichina/berrry-wine.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/wine-assembly-connect .github/skills/wine-assembly-connect && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "wine-assembly-connect" agent skill from https://github.com/vgrichina/berrry-wine/tree/main/skills/wine-assembly-connect into .github/skills/wine-assembly-connect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wine-assembly-connect", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vgrichina/berrry-wine wine-assembly-connect --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vgrichina/berrry-wine.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/wine-assembly-connect .opencode/skills/wine-assembly-connect && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "wine-assembly-connect" agent skill from https://github.com/vgrichina/berrry-wine/tree/main/skills/wine-assembly-connect into .opencode/skills/wine-assembly-connect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wine-assembly-connect", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
wine-assembly-connectConnect to a Windows 98 game or app that a person is running in their browser on wine-assembly, then see its screen and play it with mouse and keyboard.
Wine Assembly Connect is an agent skill from vgrichina/berrry-wine. Connect to a Windows 98 game or app that a person is running in their browser on wine-assembly, then see its screen and play it with mouse and keyboard. Use when someone gives you a link containing "wa1." or a token starting "wa1.", or asks you to play or help with their wine-assembly session.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `reference/api.md` and `reference/playing.md`).
It sits in Security, covering Reverse engineering and malware. It works with WebAssembly and Windows. The repository describes itself as: Run real Windows 98 apps and games in your browser. An x86 emulator and Win32 layer written directly in WebAssembly Text, no OS image, no source ports. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit dc7e845. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodenpmFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
wine-assembly.berrry.appFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Wine Assembly Connect loads about 1.9k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 1,069 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from vgrichina/berrry-wine at commit dc7e845, republished under its MIT licence (© vgrichina). 1,069 words, ~1,866 tokens.
.claude/skills/wine-assembly-connect/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.A person is running an old Windows program (a game, usually) in their browser at wine-assembly, and wants you to see it and play it. They gave you a link like
https://wine-assembly.berrry.app/skills/wine-assembly-connect/SKILL.md#wa1.Qm9v…or just the part after #, starting wa1.. That part is the token. It is a
one-time invitation to their browser tab, and it expires about 10 minutes after
they made it. Treat it like a password: don't post it anywhere or put it in a file
other people can read.
You connect by running a small bridge program on your machine. The bridge talks to
their browser directly over WebRTC and gives you a plain HTTP API on 127.0.0.1.
Anything that can run node and curl can do this: no account, no package install,
no API keys.
You need: a shell, Node.js 18 or newer (node --version), curl, and outbound
internet access. If you can't run commands, tell the person that this skill needs an
agent that can run shell commands, and stop.
mkdir -p ~/.cache/wine-agent && cd ~/.cache/wine-agent
curl -fsSLO https://wine-assembly.berrry.app/skills/wine-assembly-connect/scripts/wine-agent.mjs
curl -fsSL https://wine-assembly.berrry.app/skills/wine-assembly-connect/scripts/SHA256SUMS.txt | shasum -a 256 -c -Expect wine-agent.mjs: OK. On Linux without shasum, use sha256sum -c -.
It is one file (about 1 MB) with its WebRTC library bundled in, and it needs no
npm install.
If the link the person gave you starts with a different address (a local dev server
such as http://127.0.0.1:8080/...), download from that address instead.
Pass the whole link or just the token, in single quotes. Run it in the background and keep it running for the whole session, because it holds the connection:
node ~/.cache/wine-agent/wine-agent.mjs '<the link or wa1. token>' --runs-as='<what you are, e.g. "Codex CLI">' > ~/.cache/wine-agent/log.txt 2>&1 &
sleep 2; cat ~/.cache/wine-agent/log.txtThe bridge writes one line per event. The first is:
READY http://127.0.0.1:53817 key=4f0c…Keep that address and key. Every request below goes to that address with the header
Authorization: Bearer <key>. The examples use:
B=http://127.0.0.1:53817; K='Authorization: Bearer 4f0c…'--runs-as is a label shown to the person ("says it runs as: …, unverified"). Make it
honest.
The first time on a machine, the bridge makes itself an identity (a signing key saved
in ~/.config/wine-agent/) and has to register it as a bot, which takes one small
puzzle. The log then says REGISTER …:
curl -s -H "$K" $B/registerThat returns a puzzle. Solve it, then choose a bot name: 4 to 30 letters, digits or
_, ending in bot (the person will see it; for example claudeplaysbot):
curl -s -H "$K" -X POST $B/register -d '{"answer":"<your answer>","username":"<name>bot"}'Expect {"ok":true,"username":"…"}. If the answer is wrong you get a new puzzle, so
try again. Later runs on the same machine skip this step.
curl -s -H "$K" $B/statusstate walks through starting, then publishing, then asking, then connected.
asking means the answer was published; the bridge cannot yet tell whether the
page has displayed the request or the person clicked Allow. Tell them to click
Allow when the request appears, then poll /status every few seconds. If they
already allowed it and it remains asking, inspect the page's connection message
rather than repeatedly asking for approval. next in the reply says what to do.
connected: go to step 5.closed or failed: read error. The usual causes are that the person denied
you, closed the tab, or the link expired. Ask them for a new link and start again
from step 2 (kill the old bridge first).Start with a screenshot. Its pixels are the click coordinates:
curl -s -H "$K" $B/screenshot.png -o screen.png # then look at screen.png
curl -s -H "$K" $B/snapshot # {screen:{w,h}, title, frozen}Then act:
curl -s -H "$K" -X POST $B/click -d '{"x":120,"y":88}'
curl -s -H "$K" -X POST $B/click -d '{"x":120,"y":88,"button":"right"}'
curl -s -H "$K" -X POST $B/dblclick -d '{"x":40,"y":40}'
curl -s -H "$K" -X POST $B/drag -d '{"x1":10,"y1":10,"x2":200,"y2":150}'
curl -s -H "$K" -X POST $B/key -d '{"key":"Enter"}' # Escape, Left, F2, A, …
curl -s -H "$K" -X POST $B/key -d '{"key":"Left","type":"down"}' # hold …
curl -s -H "$K" -X POST $B/key -d '{"key":"Left","type":"up"}' # … release
curl -s -H "$K" -X POST $B/type -d '{"text":"hello\n"}'After each action, take another screenshot before deciding the next one. A game keeps running while you think, so for anything timing-sensitive use frozen mode:
curl -s -H "$K" -X POST $B/frozen -d '{"on":true}' # the game stops
curl -s -H "$K" -X POST $B/key -d '{"key":"Right","type":"down"}'
curl -s -H "$K" -X POST $B/step -d '{"n":10}' # run 10 steps, then stop again
curl -s -H "$K" -X POST $B/key -d '{"key":"Right","type":"up"}'
curl -s -H "$K" -X POST $B/frozen -d '{"on":false}' # let it run againIf nothing is running yet, GET /apps lists what the person can run and
POST /launch {"app":"sol"} starts one.
Every reply is JSON: {"ok":true,…} or {"error":"…"}. The full list is in
reference/api.md. Tips for actually playing (timing, menus,
dialogs, common games) are in reference/playing.md.
The person can switch you to watch only, pause you, turn off your mouse and
keyboard, or disconnect at any time. Their page enforces this, not you. When it
happens, actions come back as errors saying why (for example the player set watch-only mode: you can look but not act), and /status shows it under
lastEvent. Don't retry around it. Say what you'd like to do and let them hand
control back.
Run page code (/eval) only if they explicitly enabled it. It is off by default and
works only on debug pages.
curl -s -H "$K" -X POST $B/disconnectThat tells their page you left and stops the bridge. Closing their tab ends it from their side.
| You see | Do |
|---|---|
ERROR … token when starting | The token got cut off or mangled. Copy it again exactly, in single quotes. |
state: failed, "network path … blocked" | A strict firewall or NAT on one side. Try another network, and tell the person. |
expired / "link expired" | Ask the person for a fresh link from Start → Connect Agent…. |
| 401 from the bridge | The key is wrong. It's on the READY line, and a new one is made each run. |
409 not connected | Check /status. You may still be asking, or the session closed. |
| A click does nothing | Screenshot first, because the screen may have changed. Some controls need /mouse down, a short wait, then up. |
© vgrichina, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts) in skills/wine-assembly-connect of vgrichina/berrry-wine.
Open the folder on GitHubat commit dc7e845
Wine Assembly Connect next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Wine Assembly Connect this skillvgrichina/berrry-wine | 116 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Dsl Vm Reversezhaoxuya520/reverse-skill | 41k | 3 repos | ~2.3k | Automated safety check: Pass | MIT | |
| Dsl Vm Reversesickn33/agentic-awesome-skills | 47k | 1 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Client Request Signature Reversalawarexone/Agentic-Bug-Hunter | 5.3k | — | ~4.7k | Automated safety check: Pass | MIT | |
| Bringupjenissimo/bottleship | 152 | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Webhome Extension Builderwebhtv/webhtv | 1.7k | — | ~2.8k | Automated safety check: Pass | GPL-3.0 |
zhaoxuya520/reverse-skill
Reverse JavaScript-based custom DSL/VM interpreters, non-standard WASM-like runtimes, and risk-control engines.
sickn33/agentic-awesome-skills
Reverse JavaScript-based custom DSL/VM interpreters and risk-control engines: identify IIFE/switch-based opcode dispatch, extract opcode tables, and capture runtime semantics.
awarexone/Agentic-Bug-Hunter
Recovers a client-side request signature or anti-bot token just far enough to replay blocked requests in bug bounty testing, starting from a captured packet.
jenissimo/bottleship
Drive and observe the BottleShip emulator to bring up a game, using the AI-agent harness (window.BS.harness + bun tools/harness.ts).
webhtv/webhtv
Build, review, debug, reverse-engineer, and package WebHome injected extension scripts for FongMi/WebHome App WebView pages.
morluto/rea
Design or change REA investigation tools, CLI/MCP contracts, provider capabilities, and Evidence semantics.
Works with
Categories
Connect to a Windows 98 game or app that a person is running in their browser on wine-assembly, then see its screen and play it with mouse and keyboard. Wine Assembly Connect is an agent skill from vgrichina/berrry-wine. Connect to a Windows 98 game or app that a person is running in their browser on wine-assembly, then see its screen and play it with mouse and keyboard.
Wine Assembly Connect fits situations like: someone gives you a link containing wa1; A token starting wa1; asks you to play; help with their wine-assembly session.
Run `npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a claude-code`. Or copy the skill folder (skills/wine-assembly-connect in vgrichina/berrry-wine) into .claude/skills/wine-assembly-connect in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a codex`. Or copy the skill folder (skills/wine-assembly-connect in vgrichina/berrry-wine) into .agents/skills/wine-assembly-connect in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vgrichina/berrry-wine --skill wine-assembly-connect -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wine-assembly-connect, .gemini/skills/wine-assembly-connect, .github/skills/wine-assembly-connect and .opencode/skills/wine-assembly-connect in your project.
Going by SKILL.md and its folder, Wine Assembly Connect needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node and npm). Our summary lists: Node.js.
SKILL.md names 1 domain. As links in the text: wine-assembly.berrry.app. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Wine Assembly Connect is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Wine Assembly Connect: Dsl Vm Reverse (zhaoxuya520/reverse-skill, 41k stars), Dsl Vm Reverse (sickn33/agentic-awesome-skills, 47k stars), Client Request Signature Reversal (awarexone/Agentic-Bug-Hunter, 5.3k stars) and Bringup (jenissimo/bottleship, 152 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vgrichina (a GitHub user) maintains it in vgrichina/berrry-wine, which has 116 GitHub stars. The repository was last updated on October 11, 2026.
Source: vgrichina/berrry-wine on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.