Repository navigation
- Engines: Godot and Unity, now also Cocos Creator and three.js (both beta, by Shahar Bar). Agents: Claude Code, now also Codex (by Sam).
- Codex. The plugin installs in Codex (
codex plugin marketplace add barmoshe/playmark, thencodex plugin add playmark@playmark), with the same skill and helpers as Claude Code: install, triage, resolve, start a new game. Thanks to SJ for the first version (#1). Tested end to end withcodex execon a Godot game. - Cocos Creator (beta).
cocos/playmark/playmark.ts, one script that starts by itself in debug web builds and the browser preview of Cocos Creator 3.8+: Ctrl+Shift+M (three fingers on a phone) freezes the game into a DOM overlay with pins, boxes, categories, a note and a 5 s rewind; each mark lists the 2D/UI nodes and 3D renderers under it. A browser can't write files, soscripts/sink.mjs(local only, Node built-ins) receives each mark and writes the same.playmark/folder; toasts, ghosts and automatic error marks work as in the other engines./playmark:installdetects a Cocos project.warpandsmokesay they aren't available for Cocos yet. Release builds keep a 0.7 KB stub that never starts. Checked with 3.8.8 web-mobile builds in Chrome on Windows; seecocos/README.md. - three.js (beta).
three/playmark.js, one ES module with no dependency but the game'sthree. The game callsPlaymark.attach({ renderer, scene, camera })in development; the same overlay, clip, toasts, ghosts and automatic error marks as Cocos, through the same sink. Pins are raycast against the scene, boxes list objects whose bounds center is inside; each mark names the objects, their material, geometry anduserDatakeys. It freezes the game throughonPause/onResumeor by stopping asetAnimationLooploop, and says so when it can't./playmark:installdetects apackage.jsonthat depends onthree.warpandsmokesay they aren't available yet. Checked with r170 in Chromium on Windows on a demo scene; seethree/README.md. - Cocos: test on your phone.
sink.mjs --lanserves the debug web build to the Wi-Fi as well, prints its URL with a session token and a QR code, and refuses any other device without the token (status and the game files included). Requests from the PC itself keep the localhost rules. The page talks to the sink on its own origin, shows a MARK button next to the three-finger tap, and the overlay fits a portrait phone (44 px buttons, 16 px note, follows the soft keyboard). Marks land in the same.playmark/inbox, and "Fixed #N" reaches the phone. Node built-ins only; the QR encoder isscripts/qr.mjs. - Approve or reopen a fix from the game (Cocos). Tap a fixed ghost: Approve hides it for good (
approved), Still broken sends the mark back to the inbox with the fix that did not hold (reopened[]). An open mark can be dismissed from its card. On a phone, hold MARK to show or hide ghosts; switched off, they stay off on that device. The sink takesPOST /playmark/marks/<id>/verdict. - One skill for both agents: install, triage and new-game flows live in
skills/playmark/SKILL.md; the Claude Code commands point to it. inbox.mjs export [--all]: one HTML page with every mark (frame, note, code under each pin, clip, log), images inside. Playmark without any agent: install, play, mark, export, share.- New games get an
AGENTS.md(Codex and most agents read it) and aCLAUDE.mdthat imports it. - Godot: a game never opened in the editor no longer gets two automatic bug marks for the addon's fonts on first run. Found by Codex during testing.
- Submitted to Anthropic's plugin directory (in review). To pass its checks: no
.gitattributesexport-ignore (the release's addon-only zip is built from named paths instead), a plugin icon, homepage, documentation, support and privacy links inplugin.json, and aPRIVACY.md(Playmark collects nothing). - The finished showcase videos live on the site, not in the repo: every install downloads about 37 MB instead of 58.
- Docs: the README, the Unity README (screenshots, a tested table) and the skill cover Godot, Unity, Claude Code, Codex and no agent.
- Review fixes for Cocos, phone mode and three.js (PRs #7-#9 by Shahar Bar, merged with fixes):
?playmark_sink=only points at this machine; a page can't forge a mark's verdict or fix fields; no dismiss while the agent is working; status polling survives a bad reply; early errors become marks once the sink answers; keyups reach the game. Phone mode: the token leaves the page address at once, no referrer, the sink only answers its own page, cross-site script loads and Windows short-name paths refused. three.js: an engine project wins over a three.jspackage.jsonabove it; nothing is listed under a mark when the game kept running (frozen: false);Playmark.detach()and re-attaching a new renderer; clicks on the overlay stay out of the game.
Install in Claude Code: /plugin marketplace add barmoshe/playmark, /plugin install playmark@playmark, then /playmark:install in your game. In Codex: codex plugin marketplace add barmoshe/playmark, codex plugin add playmark@playmark.