An experimental agent skill for turning long documents and over-iterated ideas into self-contained interactive HTML maps you can understand, rearrange and write from.
Source on GitHub · the skill · the template · MIT
A Room of One’s Own, mapped. Click a heading to fold a branch away, drag its node to reorder, and copy the result back out as an outline.
LLMs are good at expanding an idea, challenging it and producing one more polished iteration. After enough rounds, that fluency becomes a trap: the conversation contains so much finished-sounding prose that writing the piece yourself is suddenly harder than it was at the beginning. The easy next step is to share the model’s text. Your own voice quietly disappears from the process.
Interactive Outline Map stops one step earlier.
It turns the accumulated material into a manipulable structure of claims, evidence, tensions, examples, decisions and open questions. The result is deliberately not a finished article. It is a handoff from machine-assisted thinking back to human authorship.
The skill has two primary uses, and a third way of reading:
The interaction is deliberately limited to the first tier of an outliner: whole branches move, individual claims do not. The point is to get you writing, not to pull you into the minutiae of outlining. If you need to move a single claim between branches, edit the file — that is a boundary of this version, not an oversight.
data- attributes.Four named leaf kinds keep the distinctions the skill asks for visible: key idea, from the source, open question and your words.
A summary map tells you what a text says. A reader map also takes you there. It is for the moment when the outline has made you curious and you want to check the source itself: what exactly Woolf wrote about the looking-glass, or how Simon argued that people will still have jobs.
A Room of One’s Own, as a reader map. The card on the left opened the text on the right.
What it adds to an ordinary map:
¶7–12; clicking it opens the text pane at those paragraphs and tints them;#p54 as you go, so a link opens the text at the same paragraph.Use it on a laptop-width screen or wider. At about 1,180 pixels and up, the map and the text sit side by side, and that is where the back-and-forth works best. On a phone the text opens over the map, one at a time: everything still works, but you lose the view of both together, which is the point.
Reader maps are built with the scripts in scripts/reader/: a splitter turns a PDF (pdf_paragraphs.py) or an HTML edition (html_paragraphs.py) into numbered paragraphs, you write the outline as a small spec with a paragraph range on every card, and build_reader.py assembles the page from the same template as every other map. The page embeds the whole source, so build a public one only from a text you may redistribute. For anything else, --outline-only builds the same map without the text, with locators that name the source’s own section headings instead.
The skill is a plain SKILL.md with an assets directory, so it works in more than one agent.
Codex
git clone https://github.com/petriaukia/interactive-outline-map.git ~/.codex/skills/interactive-outline-map
Claude Code
git clone https://github.com/petriaukia/interactive-outline-map.git ~/.claude/skills/interactive-outline-map
For a single project rather than your personal skills, clone it into .claude/skills/ in the repository instead. Restart the agent after installing so the new skill is discovered.
In Codex, invoke it by name:
$interactive-outline-map Turn this article outline into an interactive HTML map.
In Claude Code the skill is picked up from its description, so ask in plain language:
Turn this report into an interactive outline map of its claims, evidence and open questions.
For a reader map:
Make a reader map of this PDF: an outline whose every card opens the full text at the right place, covering the whole document.
For writing recovery, in either tool:
We have iterated this idea for too long. Reduce it to a structure I can write from in my own voice; do not draft the article.
The skill can also adapt an existing HTML map while preserving its content and visual style.
All seven are live at petriaukia.github.io/interactive-outline-map — the links below open the maps themselves, not their source.
--outline-only. The chapter is not ours to redistribute, so the page carries no text: each card names the section of Simon’s chapter it covers instead, and the cards still cover every paragraph exactly once.The first and the last are mode 2, writing recovery; the rest are mode 1, understanding an existing text, and the fifth is the one reader map. They carry their own frozen copy of the template’s CSS and script; when the template changes, they are regenerated from it rather than edited by hand.
scripts/check.sh path/to/map.html
It reports the mechanical failures: leftover template text, duplicate or missing branch IDs, an unreplaced storage key, a missing lang, remote dependencies, more than one key idea in a branch, and a script that does not parse. A reader map’s coverage is checked earlier, by build_reader.py, which will not write a page whose cards miss or double-count a paragraph.
The map is a working surface, not a document: branch pills, connector lines and leaf cards are there to be grabbed, folded and read quickly. Colour is a navigation cue — a branch colour identifies the branch, and each leaf kind has its own. The default palette is the author’s own; it is a handful of CSS variables at the top of the file, and swapping them is the intended way to make a map look like yours.
Early and usable. The single-file template deliberately has no framework, remote dependency, analytics or build step. The current work is focused on finding the right boundary between useful synthesis and unwanted ghostwriting.