bento-slides
This skill should be used when the request is for a slide deck, a presentation, a talk, a pitch, or "make some slides about X", and a .bento.html file is…
Skill by theschoolofai
Chalk Labs
Need help deploying bento-slides?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/theschoolofai-bento-slides
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, presentations, frontend, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/bento-slides
What's inside
- Skill name
bento-slides- Description
- This skill should be used when the request is for a slide deck, a presentation, a talk, a pitch, or "make some slides about X", and a .bento.html file is available in the workspace. Bento decks are a single HTML file whose slide data is JSON near the top, so making slides is editing that JSON. Carries the document location, the element schema, the morph rule, and the one escaping mistake that silently destroys the file.
- License
- MIT
- Instructions
- 166 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
A Bento deck is one `.bento.html` file that is the document, the editor and the
player at once. Making slides means editing JSON inside that file. You are not
writing HTML, CSS or JavaScript.
## Before anything else
**The base file must already be in the workspace.** You cannot download it: the
command runner has no network client on its allowlist. Check first:
```
glob_files("**/*.bento.html")
```
If there is no such file, stop and say so plainly. Do not hand-write an HTML
file and call it a Bento deck; the player is the other 99% of that file.
**The app file arrives with an empty deck**, which is what you want:
```html
<script type="application/bento+json" id="bento-doc"></script>
```
Your job is to fill that in, not to perform surgery on an existing document.
**Copy the base file first. Do not create a new one.**
```
copy_code_file(source="Bento_Slides.bento.html", destination="attention.bento.html")
```
`create_file` cannot do this: it refuses to overwrite the base, and it could not
reproduce 690 KB it has not read anyway. The command runner cannot do it either:
`python -c` is refused as an unbounded shell, and there is no copy program on the
allowlist. `copy_code_file` is the one route, and the copy is editable
immediately because nothing was read into the model to begin with.
Then edit the copy. Gallery templates are also valid decks but they embed images
as data URIs, over a megabyte of base64 on one line: never use one as a base.
**Never read the whole file.** It is around 690 KB, almost all of it the embedded
player and fonts. Find the block and read only around it:
```
grep_code("bento-doc") -> the line number (94 in the current release)
read_code(path, start, end) -> a small window
```
## Where the deck lives
```html
<script type="application/bento+json" id="bento-doc">
{ "format": "bento/slides", "version": 1, "title": "...", "size": {...},
"theme": {...}, "slides": [ ... ] }
</script>
```
Top level: `format` must be `"bento/slides"`, `version` is `1`, and `title`,
`size` and `theme` are required. `slides` is the array you will mostly edit.
`assets`, `fonts`, `layouts` and `meta` are optional.
**If `docId` is present, it is an identity, not a value: never regenerate it.**
A fresh app file and the gallery templates both ship without one, so its absence
is normal and not something to fix.
`size` is an object, `{"width": 1280, "height": 720}` in the current release.
Read it rather than assuming it.
## The escaping rule that destroys files
**Every `<` inside the JSON must be written `<`.**
This is not theoretical. The shipped `signal` template contains zero literal `<`
and twelve escaped `\u003c`, because a literal `<` anywhere in the JSON closes
the surrounding `<script>` tag early.
The browser then parses the rest of your deck as HTML, and the file is silently
ruined: it still opens, and it is empty. This bites hardest in `text` elements,
whose `html` field is the place you are most likely to type a tag.
## A slide
```
id unique
elements the array of things on the slide
transition "none" or "morph"
background hex colour
notes speaker notes
stateOf parent slide id, making this a hidden drill-down variant
hidden skipped during presentation
```
## An element
Every element has `id, x, y, w, h, rotation, opacity`. Then by type:
| type | the fields that matter |
| --- | --- |
| `text` | `html`, `fontSize`, `fontFamily`, `fontWeight`, `color`, `align`, `valign`, `lineHeight` |
| `shape` | `shape` (rect, ellipse, triangle, arrow, line, path), `fill`, `stroke`, `strokeWidth`, `radius` |
| `image` | `src` (a data URI or `"asset:key"`), `fit`, `radius` |
| `chart` | `preset` (bar, line, pie, scatter), `option` (ECharts-shaped) |
| `table` | `columns`, `rows`, `header`, `style` |
| `media` | `kind` (video or audio), `src`, `controls`, `autoplay`, `loop`, `muted` |
| `svg` | `asset` or `markup` |
Chart data for bar and line must be plain numbers, not objects.
## Morph is the whole reason to use this
Set `transition: "morph"` on the **later** slide. Any element whose `id` matches
one on the previous slide tweens: position, size, colour, gradients. Elements
with no partner fade in.
So a title that shrinks and moves to the corner is one element with the same id
on both slides, at different `x`, `y` and `fontSize`. It is not two elements and
not an animation you write.
Use `morphId` when you want two elements to morph into each other but need their
`id` values to stay distinct.
## LayoutFrom theschoolofai/S17Code, MIT.
More from theschoolofai/S17Code
- 0.529score
a2ui
theschoolofai
This skill should be used whenever the run has to produce a user interface rather than prose.
SkillBFreshness: BClaude Code +9 - 0.521score
web-pages
theschoolofai
This skill should be used whenever the run creates or edits an .html file, or the request mentions a page, a site, a landing page, CSS or the browser.
SkillBFreshness: BClaude Code +9 - 0.513score
house-style
theschoolofai
Always on.
SkillBFreshness: BClaude Code +9 - 0.281score
charts
theschoolofai
No description from the publisher yet.
SkillBFreshness: BClaude Code +9 - 0.278score
python-bugfix
theschoolofai
No description from the publisher yet.
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 31
- Open issues
- 0
- Last commit (this folder)
- Aug 13, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/theschoolofai/S17Code
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from theschoolofai
- 0.529score
a2ui
theschoolofai
This skill should be used whenever the run has to produce a user interface rather than prose.
SkillBFreshness: BClaude Code +9 - 0.521score
web-pages
theschoolofai
This skill should be used whenever the run creates or edits an .html file, or the request mentions a page, a site, a landing page, CSS or the browser.
SkillBFreshness: BClaude Code +9 - 0.513score
house-style
theschoolofai
Always on.
SkillBFreshness: BClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get bento-slides running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
bento-slides skill. Agent Mart. https://agentmart.dev/skills/theschoolofai-bento-slides (last updated 2026-10-24)