Electron and Den, desktop plus cloud, two-sandbox e2e, cloud auth, marketplace, org policy, worker proxy, provider sync, desktop handoff. Validate Electron against a Daytona Den server with unified proof.
67
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.opencode/skills/daytona-electron-den/SKILL.mdUse this skill for full-stack cloud behavior: one Daytona sandbox runs Den, and a separate Daytona sandbox runs the real Electron app pointed at that Den server.
Use the server skill first:
bash .devcontainer/test-server-on-daytona.sh <branch-or-commit>Record the printed values:
SERVER_SANDBOXDEN_WEB_URLDEN_API_URLDEN_WORKER_PROXY_URLValidate server health:
curl -sf "$DEN_WEB_URL/api/den/health"
curl -sf "$DEN_API_URL/health"bash .devcontainer/test-on-daytona.sh <branch-or-commit> \
--den-base-url "$DEN_WEB_URL" \
--den-api-base-url "$DEN_API_URL" \
--artifacts-volumeAdd --require-signin when the expected behavior must be signed-out until cloud
auth completes. Add --record-video --recording-name <name> when PR evidence is
needed.
Before testing cloud behavior, prove Electron is using the Daytona Den server:
JSON.stringify({ hash: location.hash, text: document.body.innerText.slice(0, 1000) })Then inspect the desktop bootstrap file:
daytona exec "$SANDBOX" -- 'cat /workspace/.openwork-daytona/desktop-bootstrap.json'Expected: baseUrl is DEN_WEB_URL and apiBaseUrl is DEN_API_URL, not
production.
For seeded/demo auth, create the handoff URL from the Den API, then paste it into Electron's Cloud Account sign-in code field. Do not rely on browser navigation alone as proof that desktop auth completed.
Fully automated variant (no paste UI): as a signed-in web user call
POST /api/den/v1/auth/desktop-handoff (body {}) to get a grant
(single-use, 5-minute TTL), then dispatch the deep link directly in the
Electron renderer via CDP — the auth provider consumes it:
window.dispatchEvent(new CustomEvent("openwork:deep-link", {
detail: { urls: ["openwork://den-auth?grant=" + grant +
"&denBaseUrl=" + encodeURIComponent(DEN_WEB_URL)] },
}));Build denBaseUrl yourself from the public Den Web URL — the server-resolved
one in the handoff response can be an internal host. Afterwards the app shows
"Choose your organization" → "Continue with organization".
Validate all of these:
/v1/me/orgs.Renderer navigation cheat-sheet (hash routes work when buttons are flaky):
#/workspace/<ws>/settings/cloud-marketplaces (the standalone view; the
"Marketplace" tab inside Extensions (Legacy) renders the embedded variant
which HIDES cloud org plugin rows by design). Expect org plugins as
"Active · runs in cloud".editor.focus() +
document.execCommand("insertText", false, text) on
[contenteditable="true"][data-lexical-editor="true"]. Do not dispatch
synthetic paste events — Lexical converts them into a "Pasted · N lines"
attachment chip. Then click Run task (exact text match) and wait for the
"Ready for new tasks" status before capturing results.For each cloud feature, use the daytona-flow-validator loop:
Minimum assertions:
Report both server and Electron proof:
/tmp/den-*.log snippets.1345d51
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.