Installs into .claude/skills of the current project.
Are you the author of Sandbox Epub?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/nodetool-ai-sandbox-epub)
---
name: sandbox-epub
description: Read an EPUB's metadata, table of contents, and chapters in a Code node or CodeAct action, with epub2 running on the host
---
# EPUB e-books in the sandbox
Specifier: `@nodetool-ai/sandbox-epub`. Import it at the top of the body.
epub2 reads from a file path, not a buffer, so this pack is a **host module**:
the host stages your bytes in a temp file for the call and removes it
afterward. The import resolves to a generated facade over NodeTool's own
implementation.
## metadata — title, author, language, and the rest
```js
import { metadata } from "@nodetool-ai/sandbox-epub";
const bytes = await workspace.readBytes("book.epub");
const meta = await metadata(bytes); // { title, creator, language, publisher, ... }
```
## tableOfContents — chapter titles in reading order
```js
import { tableOfContents } from "@nodetool-ai/sandbox-epub";
const toc = await tableOfContents(bytes);
// [{ id, title, href, order }, ...]
```
## extractText — every chapter, concatenated
```js
import { extractText } from "@nodetool-ai/sandbox-epub";
const text = await extractText(bytes);
const withCustomBreaks = await extractText(bytes, { chapterSeparator: "\n\n---\n\n" });
```
`chapterSeparator` defaults to `"\n\n"`.
## extractChapters — each chapter as its own item
```js
import { extractChapters } from "@nodetool-ai/sandbox-epub";
const chapters = await extractChapters(bytes);
// [{ id, title, href, text }, ...]
```
Get the bytes from `workspace.readBytes`, or from a fetched body with
`await response.bytes()`.
## Gotchas
- **Every export is async.**
- **10 MB per book.** Larger input is refused by name.
- **HTML is stripped, not rendered.** `extractText`/`extractChapters` return
plain text — no headings, links, or images survive the conversion.