Agent skill

Ade Scene

by arul28 in arul28/ADE

A skill your agent uses when showing something would beat describing it — status across many items, a number that changed, a comparison, a timeline, a pipeline, a distribution, ADE's own lanes…

AGPL-3.0Auto-check passed

Install Ade Scene

skills CLI
$ npx skills add arul28/ADE --skill ade-scene -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install arul28/ADE ade-scene --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/arul28/ADE.git skills-src && mkdir -p .claude/skills && cp -r skills-src/apps/desktop/resources/agent-skills/ade-scene .claude/skills/ade-scene && rm -rf skills-src

Use ~/.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/

Facts

Skill name
ade-scene
GitHub stars
114
Token cost
~2.6k tokens
SKILL.md length
1,248 words
Files
1
Skills in repo
28
Repo updated
First seen
Licence
AGPL-3.0

At a glance

A skill your agent uses when showing something would beat describing it — status across many items, a number that changed, a comparison, a timeline, a pipeline, a distribution, ADE's own lanes…

  • Works in 4 steps: Write the scene to a file (/tmp/.html),… → ade scene preview /tmp/.html --text. It… → Open the screenshot and look at it: ok… → …
  • Showing something would beat describing it — status across many items
  • SKILL.md covers Decide first: does this reply…, The loop: write, preview, fix,…, The block and What the frame gives you, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Ade Scene is an agent skill from arul28/ADE. Use this skill when showing something would beat describing it — status across many items, a number that changed, a comparison, a timeline, a pipeline, a distribution, ADE's own lanes, chats or PRs. Emit a fenced scene block of ordinary HTML, CSS and JS and ADE renders it as a live, interactive view inside the transcript. Check it first with ade scene preview. Use ade-mosaic instead when you need an ANSWER from the user.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The licence is AGPL-3.0.

When your agent uses it

  • Showing something would beat describing it — status across many items
  • A number that changed

Example prompts

  • “/ade-scene”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Write the scene to a file (/tmp/.html), body only or a whole fence.
  2. ade scene preview /tmp/.html --text. It renders the scene exactly as
  3. Open the screenshot and look at it: ok only means nothing threw. Check
  4. Put the fence in your reply.

What it can do on your machine

Read from SKILL.md and the folder at commit fbbd974. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ade Scene loads about 2.6k tokens when it runs. Until then it costs about 110 tokens; SKILL.md has 1,248 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~110
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

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.

Safety

Auto-check passed

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from arul28/ADE at commit fbbd974, republished under its AGPL-3.0 licence (© arul28). 1,248 words, ~2,599 tokens.

Download SKILL.mdSave it as .claude/skills/ade-scene/SKILL.md (or your agent's skills folder).
name
ade-scene
description
Use this skill when showing something would beat describing it — status across many items, a number that changed, a comparison, a timeline, a pipeline, a distribution, ADE's own lanes, chats or PRs. Emit a fenced `scene` block of ordinary HTML, CSS and JS and ADE renders it as a live, interactive view inside the transcript. Check it first with `ade scene preview`. Use ade-mosaic instead when you need an ANSWER from the user.

ADE scenes

Emit a fenced code block with language scene containing plain HTML. ADE renders it in a sandboxed frame with its own origin and its own Content-Security-Policy, inline in your reply, on the reply's own text column and in ADE's font and colors. You write real HTML, CSS and JavaScript — there is no schema and no component list to stay inside.

A scene shows. A mosaic asks. Never draw your own Approve button: ADE has native surfaces for permission, and a card that approves itself is not a confirmation. Reach for ade-mosaic whenever you need a decision back.

Decide first: does this reply need one?

Most replies need no scene. Add one only when a picture makes the answer clearly faster to read than prose would, and only one per reply.

Good: several PRs and their check states; status across lanes or chats (use live data); a count or metric that changed; CI stages and where it failed; a comparison of many items; a trend or distribution; anything a reader would want to hover, zoom or click through.

Bad: one number or one fact (say it), a short answer, a paragraph (write it), a list a bullet list handles, anything you need answered (use ade-mosaic), or a wall of text in a box (that is just text, further away). When unsure, skip it.

Scenes cost the reader nothing to wait for: the reply streams on while the scene draws, and a preview takes a second or two.

The loop: write, preview, fix, then reply

  1. Write the scene to a file (/tmp/<name>.html), body only or a whole fence.
  2. ade scene preview /tmp/<name>.html --text. It renders the scene exactly as the chat will, in a hidden window, and prints a screenshot path and every problem: script errors, blocked requests, a scene that never settles, and source mistakes the policy turns into blanks.
  3. Open the screenshot and look at it: ok only means nothing threw. Check the layout (columns lined up, nothing cut off or overlapping, text readable). Fix and preview again until it is right. Check --theme light if colors matter; --width 980 for wide panes.
  4. Put the fence in your reply.

Do not skip the preview for anything non-trivial: a scene that throws is a blank box in the user's transcript.

The block

The first line may carry a title and the live data the scene wants. Everything after it is your markup.

```scene
<!-- @scene title="Merged pull requests" -->
<style>
  .n { font-size: 48px; font-weight: 600; letter-spacing: -.03em; }
  .row { display: grid; grid-template-columns: 64px 1fr auto; gap: 14px;
         padding: 8px 0; border-bottom: 1px solid var(--border); opacity: 0; }
  .row:hover { background: var(--surface); }
</style>

<div class="n" id="count">0</div>
<a class="row" data-row href="ade://pr/acme/app/1237"><span>#1237</span><span>Persistent director</span><span>passed</span></a>

<script>
  ade.countUp("#count", 3);
  document.querySelectorAll("[data-row]").forEach(function (row, i) {
    ade.animate(row, [{ opacity: 0, transform: "translateY(8px)" }, { opacity: 1, transform: "none" }],
      { duration: 460, delay: 200 + i * 110 });
  });
  ade.ready();
</script>
```

No padding is added around your markup: content starts on the reply's left edge. Draw your own card (background: var(--surface); border: 1px solid var(--border); border-radius: 10px) when you want one.

What the frame gives you

window.ade is injected before your code runs:

MemberWhat it does
ade.dataThe live ADE data the scene asked for (see below), or null.
ade.on("data", fn)Called with each new data snapshot, and at once if one already arrived.
ade.on("theme", fn)Called when the user switches ADE's theme. The CSS variables already changed.
ade.themeADE's resolved palette. Also available as CSS variables.
ade.open(url)Opens an ade:// deeplink in ADE, or an http(s) page in ADE's browser. Plain <a href> links do the same. Works only in answer to a click in the scene.
ade.reducedMotionTrue when the user asked for less motion.
ade.restoredTrue when the scene already played once and is being brought back; ade.animate and ade.countUp skip to their end state then.
ade.animate(target, keyframes, options)Web Animations, collapsed to the end state under reduced motion or restore.
ade.countUp(target, to, { from, duration, decimals })Counts a number up.
ade.resize()Re-measures the scene and asks the host for the new height. Call it after you change the content's size.
ade.ready()Call it when your first paint is done.

CSS variables, already set on :root and kept current when the theme changes: --bg, --surface, --border, --fg, --fg-muted, --accent, --success, --warning, --danger, --font-sans, --font-mono, --font-size. Use them and the scene looks like the rest of ADE in every theme, light ones included. --font-sans is ADE's Geist and --font-mono its JetBrains Mono.

Show full SKILL.md (578 more words)Show less

Live ADE data

Ask on the marker line, and the scene stays true after the turn ends: scrolled back into view tomorrow, it shows tomorrow's lanes.

<!-- @scene title="Lanes" data="lanes,prs" -->
SourceEach item
lanesid, name, branch, base, primary, color, ahead, behind, dirty, changedFiles, running, awaitingInput, sessions, url
sessionsid, title, laneId, laneName, tool, status, startedAt, endedAt, url
prsnumber, title, state, checks, review, laneId, additions, deletions, updatedAt, githubUrl, url

url is an ade:// deeplink: put it in an <a href> (or pass it to ade.open) and a click opens that lane, chat or PR in ADE. The snapshot { at, lanes?, sessions?, prs? } arrives after load and again when it changes, so render from ade.on("data", render), and draw an empty state until the first one arrives.

Use live data instead of typing ADE's numbers in. Asking for data= and then hardcoding values you looked up is the worst of both: the numbers are stale tomorrow and wrong if your lookup was. Start from this and restyle it:

```scene
<!-- @scene title="Lanes" data="lanes,prs" -->
<style>
  .row { display: grid; grid-template-columns: 1fr auto auto auto; gap: 16px; align-items: center;
         padding: 8px 0; border-bottom: 1px solid var(--border); color: var(--fg); text-decoration: none; }
  .row:hover { background: var(--surface); }
  .m { color: var(--fg-muted); font-size: 12px; } .n { font-family: var(--font-mono); font-size: 12px; }
</style>
<div id="rows" class="m">Loading lanes…</div>
<script>
  function esc(s) { return String(s).replace(/[&<>"]/g, function (c) { return "&#" + c.charCodeAt(0) + ";"; }); }
  ade.on("data", function (d) {
    var prs = d.prs || [];
    document.getElementById("rows").innerHTML = (d.lanes || []).map(function (l) {
      var pr = prs.filter(function (p) { return p.laneId === l.id; })[0];
      return '<a class="row" href="' + l.url + '"><span>' + esc(l.name) + ' <span class="m">' + esc(l.branch) + '</span></span>'
        + '<span class="n">+' + l.ahead + ' −' + l.behind + '</span>'
        + '<span class="n" style="color:var(' + (l.dirty ? '--warning' : '--success') + ')">' + (l.dirty ? 'dirty' : 'clean') + '</span>'
        + '<span class="n">' + (pr ? '#' + pr.number + ' ' + esc(pr.state) : 'no PR') + '</span></a>';
    }).join("") || "No lanes.";
    ade.resize();
  });
  ade.ready();
</script>
```

ade scene preview sends a live-data scene the same snapshot the chat will, so the preview shows real lanes, chats and PRs.

What the frame does not give you

  • No network. connect-src 'none': no fetch, no XHR, no WebSocket, no remote fonts, no remote images, no <script src>. Put the data in the markup or ask for live data. Images must be data: or blob: URLs.
  • No storage. localStorage, sessionStorage, indexedDB and cookies throw in the sandbox. Keep state in variables.
  • No globals named top, parent, opener, frames or self. In a sandboxed frame those are the window's own, and touching them throws. var top = [] breaks the whole script. Rename them.
  • No access to ADE beyond the above. Different origin, sandboxed without allow-same-origin. ade.open and the data feed are the only bridges.
  • No external libraries. They cannot be fetched. Native CSS animations, SVG, canvas and the Web Animations API are what you have, and they are enough.

Lifetime

A scene is live while it is on screen: hovers, toggles, zoom and links keep working in scrollback. Off screen for a few seconds, it is swapped for a still picture of itself, and swapped back when it returns (restored: no replayed entrance). While the reader scrolls, they see the stills; a scene comes alive where they stop.

When a scene has settled and the reader's pointer is elsewhere, it idles: endless CSS and SVG animations pause and requestAnimationFrame runs a few times a second, until the pointer, a key or new data wakes it. So a looping spinner costs nothing while nobody looks at it, and a canvas animation should read well at its idle frame. Do not depend on setInterval loops; use requestAnimationFrame or CSS so the idle rules apply.

The still is taken once, when the scene first settles fully on screen: no Web Animation or CSS animation running and no DOM change for 600 ms (endless loops do not count), or 4 seconds after load. Make the scene readable when it stops moving. A scene whose meaning depends on an animation the user has to catch is meaningless tomorrow.

Size

Keep it under roughly 500 lines of markup. Past that it is a document, not a view. The hard cap is 96,000 source bytes. Over it ADE renders your code as highlighted text instead of a view. Scenes can be up to 960 px tall in the transcript (taller ones scroll inside), and the reader can expand any scene to a full-window view.

© arul28, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in apps/desktop/resources/agent-skills/ade-scene of arul28/ADE.

Open the folder on GitHubat commit fbbd974

Compare with similar skills

Ade Scene 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.

Ade Scene compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ade Scene this skillarul28/ADE114—~2.6kAutomated safety check: PassAGPL-3.0
Adelanding-ai/ade-cli2.4k—~2.4kAutomated safety check: PassApache-2.0
Scene Menu BarPostHog/posthog40k—~3.2kAutomated safety check: PassCustom licence
Scenesautonomous-ai/openharness1.1k—~4.7kAutomated safety check: PassMIT
Scene Establishing-Shot Promptchatfire-AI/huobao-drama16k—~378Automated safety check: PassCustom licence
Horizontal Scroll ScenesMengTo/Skills6.7k—~2.5kAutomated safety check: PassMIT

Similar skills

  • Ade

    landing-ai/ade-cli

    Parse documents and extract schema-shaped data with the ADE (Agentic Document Extraction) v2 APIs through the ade CLI.

    2.4k GitHub stars~2.4k tokensUpdated 1 mo ago
    Documents & OfficeAuto-check passed
  • Scene Menu Bar

    PostHog/posthog

    Official

    Conventions for adding or editing the SceneMenuBar above a scene's <SceneTitleSection.

    40k GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Scenes

    autonomous-ai/openharness

    A skill your agent uses when working with Phaser 4 scenes. An agent skill from autonomous-ai/openharness.

    1.1k GitHub stars~4.7k tokensUpdated today
    Auto-check passed
  • Scene Establishing-Shot Prompt

    chatfire-AI/huobao-drama

    Writes the final image prompt for a clear wide establishing shot of an empty scene, fixing foreground, midground, background, exits, floor, walls and key furnishings.

    16k GitHub stars~378 tokensUpdated 2 days ago
    Media & CreativeAuto-check passed
  • Build scene-by-scene chapters that advance left to right on one fixed stage while the user scrolls vertically, with native scroll as the only input.

    6.7k GitHub stars~2.5k tokensUpdated 2 days ago
    Frontend & DesignAuto-check passed
  • Sw Scene Craft

    jtydhr88/screenwriting-skills

    Scene and sequence craft (场景/段落/细节/道具/悬念/情趣) — merged from Robert McKee's scene design and five-step scene analysis (value turn, beats, text/subtext, turning points, pacing, image systems), McKee's…

    1.6k GitHub stars~2.3k tokensUpdated 5 days ago
    Media & CreativeAuto-check passed

More from arul28/ADE

All 28 skills in this repo
  • Ade App Control

    arul28/ADE

    A skill your agent uses when you need to run or drive a local Electron/desktop app and capture what it does — launch it or attach to a running renderer, read its logs or answer its terminal prompts…

    114 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Iteratively optimize an ADE tab's CPU/memory/IPC/render performance.

    114 GitHub stars~4.2k tokensUpdated today
    Auto-check passed
  • Ade Browser

    arul28/ADE

    A skill your agent uses for any browser behavior at all — opening a URL, checking a localhost page, clicking or filling a form, logging in, screenshotting, inspecting the DOM, or verifying a page…

    114 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Ade Deeplinks

    arul28/ADE

    A skill your agent uses when an agent needs to mint, share, or open ADE deeplinks (lane, work session, file, commit, artifact, branch, PR, Linear issue) so users — or the agent itself — can jump…

    114 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Ade Harnesses

    arul28/ADE

    A skill your agent uses when you need to run a chat, a CLI session, or a subagent on a specific setup — any model you pay for inside any harness (e.g.

    114 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Ade Lanes Git

    arul28/ADE

    A skill your agent uses when creating, inspecting, syncing, committing, pushing, archiving, or rebasing ADE lanes and lane worktrees through ade lanes and ade git.

    114 GitHub stars~594 tokensUpdated today
    Auto-check passed

Questions about Ade Scene

What does Ade Scene do?

A skill your agent uses when showing something would beat describing it — status across many items, a number that changed, a comparison, a timeline, a pipeline, a distribution, ADE's own lanes…. Ade Scene is an agent skill from arul28/ADE. Use this skill when showing something would beat describing it — status across many items, a number that changed, a comparison, a timeline, a pipeline, a distribution, ADE's own lanes, chats or PRs.

When should I use Ade Scene?

Ade Scene fits situations like: showing something would beat describing it — status across many items; A number that changed.

How do I install Ade Scene in Claude Code?

Run `npx skills add arul28/ADE --skill ade-scene -a claude-code`. Or copy the skill folder (apps/desktop/resources/agent-skills/ade-scene in arul28/ADE) into .claude/skills/ade-scene in your project. Claude Code loads it when a task matches its description.

How do I install Ade Scene in Codex?

Run `npx skills add arul28/ADE --skill ade-scene -a codex`. Or copy the skill folder (apps/desktop/resources/agent-skills/ade-scene in arul28/ADE) into .agents/skills/ade-scene in your project. Codex loads it when a task matches its description.

Can I use Ade Scene in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add arul28/ADE --skill ade-scene -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ade-scene, .gemini/skills/ade-scene, .github/skills/ade-scene and .opencode/skills/ade-scene in your project.

What does Ade Scene need to run?

SKILL.md names no scripts, command-line tools or credentials: Ade Scene is instructions for the agent only.

Does Ade Scene access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Ade Scene safe to install?

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. Review the folder before installing.

What licence does Ade Scene use?

Ade Scene is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ade Scene use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Ade Scene?

Skills that share tags, products or a category with Ade Scene: Ade (landing-ai/ade-cli, 2.4k stars), Scene Menu Bar (PostHog/posthog, 40k stars), Scenes (autonomous-ai/openharness, 1.1k stars) and Scene Establishing-Shot Prompt (chatfire-AI/huobao-drama, 16k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ade Scene?

arul28 (a GitHub user) maintains it in arul28/ADE, which has 114 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 8, 2026.

Source: arul28/ADE on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.