Plugins

Every plugin this site ships. Add any plugin under Add to any app to any app: open the app, open Customize (bottom left) and pick it under Add a plugin. Your own plugins go there too, by file, code or address.

Service
Gives an app something new that other plugins use, such as a language model.
On the page
Draws buttons, panels and views.
Behind the scenes
Checks, fetches or changes things, and draws nothing.
Built in
A service every app here already has. Some, such as llm, need a plugin you add to answer.

You see a plugin's code and what it asks for before it is added; it is kept on your device and starts switched off. One that needs a service brings the plugin that provides it. How the registry works · index.json · catalog.json

194 plugins and services

Add to any app

These work in any app, even one whose author never planned for them. Add them from Customize in the app.

Services

Give the app something new that other plugins use, such as a language model. A service draws nothing itself.

Language models

  • Claude (Anthropic) Service

    A language model for this app: Claude, from Anthropic. Uses your own Anthropic API key, which goes only to Anthropic.

    Asks for 3 permissions
    • provide:llm Answer every call this page's plugins make to the llm service.
    • network:api.anthropic.com Connect to api.anthropic.com.
    • secret:anthropic Use a key you give it for anthropic, which it never sees: the site adds it to its requests.

    Code

  • Gemini (Google) Service

    A language model for this app: Gemini, from Google. Uses your own Gemini API key, which goes only to Google.

    Asks for 3 permissions
    • provide:llm Answer every call this page's plugins make to the llm service.
    • network:generativelanguage.googleapis.com Connect to generativelanguage.googleapis.com.
    • secret:gemini Use a key you give it for gemini, which it never sees: the site adds it to its requests.

    Code

  • Ollama Service

    A language model for this app that runs on your own computer, with Ollama. No key needed.

    • Provides the llm service
    • In no app yet: add it to one
    Asks for 2 permissions
    • provide:llm Answer every call this page's plugins make to the llm service.
    • network:localhost:11434 Connect to localhost:11434.

    Code

  • OpenAI Service

    A language model for this app: OpenAI's models. Uses your own OpenAI API key, which goes only to OpenAI.

    Asks for 3 permissions
    • provide:llm Answer every call this page's plugins make to the llm service.
    • network:api.openai.com Connect to api.openai.com.
    • secret:openai Use a key you give it for openai, which it never sees: the site adds it to its requests.

    Code

Examples

  • Clock Service

    Provides the clock service: the time now in any time zone.

    • Provides the clock service
    • In no app yet: add it to one
    Asks for 1 permission
    • provide:clock Answer every call this page's plugins make to the clock service.

    Code

On the page

Buttons, panels and views you can add to the page.

Examples

  • World clock On the page

    The time in London, New York and Tokyo, at the foot of the page.

    • Needs clock
    • Draws append main, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 2 permissions
    • ui Draw on this page.
    • clock Use clock.

    Code

Building plugins

  • Ask the page On the page

    Answers questions about this page with a language model, from the plugins it is made of.

    • Needs llm: add one of Claude (Anthropic), Gemini (Google), OpenAI, Ollama too
    • Draws append main, so it works on a page with no slot for it
    • In Home page
    Asks for 3 permissions
    • ui Draw on this page.
    • llm Use the llm service: one way for any plugin to ask a language model, whoever makes the model.
    • plugins:read See which plugins this page has, which are on, and their code.

    Code

  • Plugin editor On the page

    Write a plugin, or change a copy of one on the page, and see what it asks for before it runs.

    • Draws append main, so it works on a page with no slot for it
    • In Home page
    Asks for 4 permissions
    • ui Draw on this page.
    • plugins:read See which plugins this page has, which are on, and their code.
    • plugins:author Read the code of this page's plugins, and add, change, remove or share your own. Each change is shown to you first.
    • debug:read See everything every plugin does, as the debug console does.

    Code

  • Plugin maker On the page

    Describe a plugin you want for this page: a language model writes it, and you accept its code before it runs.

    • Needs llm: add one of Claude (Anthropic), Gemini (Google), OpenAI, Ollama too
    • Draws append main, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 3 permissions
    • ui Draw on this page.
    • llm Use the llm service: one way for any plugin to ask a language model, whoever makes the model.
    • plugins:author Read the code of this page's plugins, and add, change, remove or share your own. Each change is shown to you first.

    Code

Your data

  • Import and export On the page

    Buttons to save each of the app's collections to a CSV or JSON file, and to import a file's rows into one.

    • Needs transfer
    • Draws append main, so it works on a page with no slot for it
    • In Spending
    Asks for 2 permissions
    • ui Draw on this page.
    • transfer Use the transfer service: import and export for the person: a collection out to a CSV or JSON file they keep, open in a spreadsheet or take to another app, and a file they choose (a bank's statement, a list from a spreadsheet, an earlier export) into a collection.

    Code

  • Sync On the page

    In a space: whether this page reaches it, and the versions of records it kept when someone else changed them first.

    Asks for 2 permissions
    • ui Draw on this page.
    • sync Use the sync service: what lets an app open in a space (/s/<space>/…) and be shared by its members.

    Code

  • Undo On the page

    Undo and Redo buttons that take back the app's most recent change to its data, and put it back again.

    • Needs history
    • Draws append main, so it works on a page with no slot for it
    • In Spending
    Asks for 2 permissions
    • ui Draw on this page.
    • history Use the history service: undo and redo for the person, across every write to an app's collections, whichever plugin made it: a delete in a table, an edit in a form, a book a plugin imported, a change an agent made.

    Code

Turning plugins on and off

  • Reset On the page

    Turns every plugin on the page back on.

    • Draws append main, so it works on a page with no slot for it
    • In Home page
    Asks for 3 permissions
    • ui Draw on this page.
    • plugins:read See which plugins this page has, which are on, and their code.
    • plugins:manage Turn this page's plugins on and off.

    Code

  • Switchboard On the page

    A switch for each plugin on the page.

    Asks for 3 permissions
    • ui Draw on this page.
    • plugins:read See which plugins this page has, which are on, and their code.
    • plugins:manage Turn this page's plugins on and off.

    Code

Looking inside

  • Debug console On the page

    A bug button that shows errors and the trace, ready to copy into a bug report.

    Asks for 2 permissions
    • ui Draw on this page.
    • debug:read See everything every plugin does, as the debug console does.

    Code

  • Hook tracer On the page

    Shows each hook an action runs, in order, and what every plugin listening said.

    • Draws append main, so it works on a page with no slot for it
    • In Home page
    Asks for 3 permissions
    • ui Draw on this page.
    • plugins:read See which plugins this page has, which are on, and their code.
    • debug:read See everything every plugin does, as the debug console does.

    Code

  • View source On the page

    Shows the code of every plugin on the page, and what each one may do.

    • Draws append main, so it works on a page with no slot for it
    • In Home page
    Asks for 2 permissions
    • ui Draw on this page.
    • plugins:read See which plugins this page has, which are on, and their code.

    Code

Agents

  • Board On the page

    Questions from the app's agents, waiting for your answer, and what they did lately.

    Asks for 5 permissions
    • ui Draw on this page.
    • bus:board Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • hook:listen:bus:asked Hear bus:asked.
    • hook:listen:bus:answered Hear bus:answered.
    • hook:listen:agent:* Hear agent:*.

    Code

Built into this site

Services every app here has, without adding anything. A plugin calls one with ctx.call("name", …) once its manifest asks for it. Which ones a site has is the site's choice, in kernel.json.

For app authors

Standard plugins and agents an app links in its app.html, rather than ones a person adds: Customize (every app has it), the chat for an app's agents, the command palette, the app maker's own parts. Copy a link tag into your app to use one.

From the demos

Each demo's own plugins, and the samples it suggests. Most use their app's data or hooks, so they belong with that app, but each is an ordinary plugin to read and copy. Paste one's address into Customize's Add from URL to try it.

Sound editor 6

  • Echo Behind the scenes

    An echo for the sound editor.

    Asks for 2 permissions
    • audio Use the audio service: sound for plugins, played by the tab that runs the plugin workers.
    • hook:intercept:sound-editor:effects Change or stop sound-editor:effects before it happens.

    Code

  • Lo-fi Behind the scenes

    A bit crusher for the sound editor.

    Asks for 2 permissions
    • audio Use the audio service: sound for plugins, played by the tab that runs the plugin workers.
    • hook:intercept:sound-editor:effects Change or stop sound-editor:effects before it happens.

    Code

  • Sound editor On the page

    A clip's waveform to pick parts of, play, edit and run through effects.

    Asks for 8 permissions
    • ui Draw on this page.
    • audio Use the audio service: sound for plugins, played by the tab that runs the plugin workers.
    • commands Use the commands service: things a person (or an agent) can do in an app, named once by the plugin that does them, and run from anywhere: a command palette, a keyboard shortcut, or a model's tool call.
    • plugins:read See which plugins this page has, which are on, and their code.
    • audio:kept:sound-timeline Use the audio service: sound for plugins, played by the tab that runs the plugin workers.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • folder:write Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • folder:choose Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.

    Code

  • Timeline On the page

    Clips laid side by side as tracks you can still move, re-level, pan and mute; plays the mix, or keeps it as a clip.

    Asks for 6 permissions
    • ui Draw on this page.
    • audio Use the audio service: sound for plugins, played by the tab that runs the plugin workers.
    • commands Use the commands service: things a person (or an agent) can do in an app, named once by the plugin that does them, and run from anywhere: a command palette, a keyboard shortcut, or a model's tool call.
    • data:read:sound-clips Read the sound-clips records, and hear when they change.
    • data:write:sound-clips Change the sound-clips records. Unless it made them, you are asked first each time.
    • audio:kept:sound-editor Use the audio service: sound for plugins, played by the tab that runs the plugin workers.

    Code

  • Tremolo Behind the scenes

    A tremolo for the sound editor.

    Asks for 2 permissions
    • audio Use the audio service: sound for plugins, played by the tab that runs the plugin workers.
    • hook:intercept:sound-editor:effects Change or stop sound-editor:effects before it happens.

    Code

  • Telephone Behind the scenes

    Sounds like it's on the phone.

    • Needs audio
    • In no app yet: add it to one
    Asks for 2 permissions
    • audio Use the audio service: sound for plugins, played by the tab that runs the plugin workers.
    • hook:intercept:sound-editor:effects Change or stop sound-editor:effects before it happens.

    Code

Beat pad 5

  • Euclidean rhythms On the page

    Spreads a number of hits evenly across a row.

    Asks for 2 permissions
    • ui Draw on this page.
    • commands Use the commands service: things a person (or an agent) can do in an app, named once by the plugin that does them, and run from anywhere: a command palette, a keyboard shortcut, or a model's tool call.

    Code

  • Ripples On the page

    The pattern as a radar, with a ripple for every hit.

    Asks for 3 permissions
    • ui Draw on this page.
    • data:read:patterns Read the patterns records, and hear when they change.
    • data:read:transport Read the transport records, and hear when they change.

    Code

  • Sequencer On the page

    Sixteen steps, six voices: the pads, the clock and the sound.

    Asks for 2 permissions
    • ui Draw on this page.
    • audio Use the audio service: sound for plugins, played by the tab that runs the plugin workers.

    Code

  • Drums only On the page

    Hides the bass and bell rows.

    • Draws hide each .row[data-track='bass'], .row[data-track='bell'] in sequencer, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 2 permissions
    • ui Draw on this page.
    • ui:transform:sequencer Change how sequencer's view looks.

    Code

  • Sunset theme On the page

    Warm plum surfaces and a coral accent.

    • In no app yet: add it to one
    Asks for 1 permission
    • ui:theme Change the app's colours and shapes.

    Code

Studio board 7

  • Board On the page

    The cards, as a board of columns, and each card on its own screen.

    Asks for 2 permissions
    • ui Draw on this page.
    • router Use the router service: a screen for every address: the reading list opened at /demos/reading-list/book/42 shows the screen `/book/42`, so a person can bookmark or share it, and back and forward move between screens.

    Code

  • Checklist On the page

    Steps for each card: a count on the board, and a checklist on the card's screen.

    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Due dates On the page

    How soon each card is due, as a badge on the card.

    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Pulse On the page

    Progress, flow and who has what, from the board's cards.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:studio-cards Read the studio-cards records, and hear when they change.

    Code

  • Work-in-progress limits On the page

    A limit on how many cards each busy column holds, shown in its header.

    • Draws append each .column-head in studio, so it works on a page with no slot for it
    • In Studio board
    Asks for 2 permissions
    • ui Draw on this page.
    • ui:transform:studio Change how studio's view looks.

    Code

  • Focus On the page

    Hides the Ideas and Shipped columns, so only the work in flight shows.

    • Draws hide each .column[data-column='ideas'], .column[data-column='done'] in studio, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 2 permissions
    • ui Draw on this page.
    • ui:transform:studio Change how studio's view looks.

    Code

  • Midnight theme On the page

    Deep blue surfaces and an electric accent at night, cool blue-grey by day.

    • In no app yet: add it to one
    Asks for 1 permission
    • ui:theme Change the app's colours and shapes.

    Code

Calendar 3

  • Agenda On the page

    The next two weeks: events, and birthdays from your contacts.

    Asks for 3 permissions
    • ui Draw on this page.
    • data:read:events Read the events records, and hear when they change.
    • data:read:contacts Read the contacts records, and hear when they change.

    Code

  • Events On the page

    Add, edit and delete events.

    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Month On the page

    A month of events as a grid.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:events Read the events records, and hear when they change.

    Code

Contacts 4

  • Birthdays On the page

    Birthdays coming up, and how old each person will be.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:contacts Read the contacts records, and hear when they change.

    Code

  • Next meeting On the page

    Adds each person's next calendar event to the birthdays list.

    • Draws append each li[data-name] in birthdays, so it works on a page with no slot for it
    • In Contacts
    Asks for 3 permissions
    • ui Draw on this page.
    • ui:transform:birthdays Change how birthdays's view looks.
    • data:read:events Read the events records, and hear when they change.

    Code

  • People On the page

    Everyone you know, with a form to add or edit a person and a table of them all.

    Asks for 1 permission
    • ui Draw on this page.

    Code

  • vCard import On the page

    Paste vCards to add people to your contacts.

    Asks for 3 permissions
    • ui Draw on this page.
    • data:read:contacts Read the contacts records, and hear when they change.
    • data:write:contacts Change the contacts records. Unless it made them, you are asked first each time.

    Code

Debugger 7

  • Debugger: events On the page

    Hooks, calls, refusals, workers and errors as they happen, filtered and paused at will.

    Asks for 5 permissions
    • ui Draw on this page.
    • reflect:read Use the reflect service: the kernel describes what is running in it, for debuggers (demos/debugger/).
    • debug:read See everything every plugin does, as the debug console does.
    • bus:read:debugger-focus Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • hook:listen:bus:posted Hear bus:posted.

    Code

  • Debugger: hooks On the page

    Every hook: who defines it, its mode and limits, who listens, and how often it fired.

    Asks for 5 permissions
    • ui Draw on this page.
    • reflect:read Use the reflect service: the kernel describes what is running in it, for debuggers (demos/debugger/).
    • debug:read See everything every plugin does, as the debug console does.
    • bus:read:debugger-focus Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • hook:listen:bus:posted Hear bus:posted.

    Code

  • Debugger: plugins On the page

    Each plugin's manifest, requested and granted permissions, refusals, hooks, workers and code.

    Asks for 5 permissions
    • ui Draw on this page.
    • reflect:read Use the reflect service: the kernel describes what is running in it, for debuggers (demos/debugger/).
    • debug:read See everything every plugin does, as the debug console does.
    • bus:read:debugger-focus Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • hook:listen:bus:posted Hear bus:posted.

    Code

  • Debugger: space server On the page

    In a space, shows what runs in the kernel on the space's server: its plugins, permissions, hooks, routes, workers and the members connected.

    Asks for 3 permissions
    • ui Draw on this page.
    • reflect:read Use the reflect service: the kernel describes what is running in it, for debuggers (demos/debugger/).
    • members Use members.

    Code

  • Debugger: space server events On the page

    In a space, the trace of the kernel on the space's server as it happens: hooks, calls, refusals and errors.

    Asks for 4 permissions
    • ui Draw on this page.
    • reflect:read Use the reflect service: the kernel describes what is running in it, for debuggers (demos/debugger/).
    • members Use members.
    • hook:listen:sync:trace Hear sync:trace.

    Code

  • Debugger: target On the page

    Lists every open tab and its app, and picks the one the debugger looks at.

    Asks for 6 permissions
    • ui Draw on this page.
    • reflect:read Use the reflect service: the kernel describes what is running in it, for debuggers (demos/debugger/).
    • debug:read See everything every plugin does, as the debug console does.
    • bus:post:debugger-focus Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • bus:read:debugger-focus Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • hook:listen:bus:posted Hear bus:posted.

    Code

  • Debugger: workers On the page

    Every plugin worker running, grouped by the tab that started it.

    Asks for 5 permissions
    • ui Draw on this page.
    • reflect:read Use the reflect service: the kernel describes what is running in it, for debuggers (demos/debugger/).
    • debug:read See everything every plugin does, as the debug console does.
    • bus:read:debugger-focus Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • hook:listen:bus:posted Hear bus:posted.

    Code

Doodle 1

  • Doodle On the page

    A pad to draw on, and a chart of the strokes by colour.

    Asks for 1 permission
    • ui Draw on this page.

    Code

Feeds 3

  • Feed fetcher Behind the scenesRuns on a space's server

    Reads each feed over https on the space's server, every half hour, and keeps the stories.

    Asks for 3 permissions
    • network Connect to sites on the internet.
    • schedule Use the schedule service: work a plugin wants done later, once or again and again, with the `schedule` permission.
    • data:read:feeds Read the feeds records, and hear when they change.

    Code

  • Feeds On the page

    Follow RSS and Atom feeds, and read their stories.

    Asks for 6 permissions
    • ui Draw on this page.
    • data:read:items Read the items records, and hear when they change.
    • data:read:fetched Read the fetched records, and hear when they change.
    • data:read:here-items Read the here-items records, and hear when they change.
    • data:read:here-fetched Read the here-fetched records, and hear when they change.
    • sync Use the sync service: what lets an app open in a space (/s/<space>/…) and be shared by its members.

    Code

  • Read feeds here Behind the scenes

    Without a space, reads the feeds you follow on this device, through this site, while the app is open.

    Asks for 4 permissions
    • network Connect to sites on the internet.
    • schedule Use the schedule service: work a plugin wants done later, once or again and again, with the `schedule` permission.
    • sync Use the sync service: what lets an app open in a space (/s/<space>/…) and be shared by its members.
    • data:read:feeds Read the feeds records, and hear when they change.

    Code

Glowfall together 6

  • Catches for everyone Behind the scenesRuns on a space's server

    Scores each player's catches and the team's, and counts the rain.

    Asks for 1 permission
    • hook:intercept:game:rules Change or stop game:rules before it happens.

    Code

  • Field On the page

    Draws the game everyone in the space plays, and sends your moves to it.

    Asks for 4 permissions
    • ui Draw on this page.
    • live Send and hear live messages with the other people in this space and its server, such as a game's moves.
    • commands Use the commands service: things a person (or an agent) can do in an app, named once by the plugin that does them, and run from anywhere: a command palette, a keyboard shortcut, or a model's tool call.
    • hook:listen:sync:live Hear sync:live.

    Code

  • Glowfall together Behind the scenesRuns on a space's server

    Runs a game of Glowfall on the space's server, for every member who joins.

    Asks for 5 permissions
    • game Use the game service: a game loop, with every rule of the game in plugins.
    • live Send and hear live messages with the other people in this space and its server, such as a game's moves.
    • hook:listen:sync:live Hear sync:live.
    • hook:listen:game:frame Hear game:frame.
    • hook:listen:game:ended Hear game:ended.

    Code

  • Jars for everyone Behind the scenesRuns on a space's server

    Moves each player's jar a lane, or to the lane they tapped.

    Asks for 1 permission
    • hook:intercept:game:update Change or stop game:update before it happens.

    Code

  • Lobby On the page

    Joins the game on the space's server, starts it, and shows who is playing and the scores.

    Asks for 7 permissions
    • ui Draw on this page.
    • live Send and hear live messages with the other people in this space and its server, such as a game's moves.
    • members Use members.
    • sync Use the sync service: what lets an app open in a space (/s/<space>/…) and be shared by its members.
    • hook:listen:sync:live Hear sync:live.
    • hook:listen:members:changed Hear members:changed.
    • hook:listen:sync:changed Hear sync:changed.

    Code

  • Referee Behind the scenesRuns on a space's server

    One jar for each member, moves no faster than a person's, and scores only for fireflies caught.

    Asks for 5 permissions
    • hook:intercept:game:update Change or stop game:update before it happens.
    • hook:intercept:game:rules Change or stop game:rules before it happens.
    • hook:intercept:glowfall-together:join Change or stop glowfall-together:join before it happens.
    • hook:intercept:glowfall-together:move Change or stop glowfall-together:move before it happens.
    • hook:listen:game:started Hear game:started.

    Code

Glowfall 7

  • Catch Behind the scenes

    Scores the fireflies the jar catches and counts the raindrops it doesn't dodge.

    Asks for 1 permission
    • hook:intercept:game:rules Change or stop game:rules before it happens.

    Code

  • Controls On the page

    Start, pause and steer, by button or key, and the best scores.

    Asks for 5 permissions
    • ui Draw on this page.
    • game Use the game service: a game loop, with every rule of the game in plugins.
    • commands Use the commands service: things a person (or an agent) can do in an app, named once by the plugin that does them, and run from anywhere: a command palette, a keyboard shortcut, or a model's tool call.
    • hook:listen:game:ended Hear game:ended.
    • hook:listen:game:started Hear game:started.

    Code

  • Jar Behind the scenes

    Moves the jar a lane left or right for each press.

    Asks for 1 permission
    • hook:intercept:game:update Change or stop game:update before it happens.

    Code

  • Meadow On the page

    Draws the night meadow, the jar and everything falling, on a canvas, and steers the jar to where you tap or drag.

    Asks for 3 permissions
    • ui Draw on this page.
    • game Use the game service: a game loop, with every rule of the game in plugins.
    • hook:listen:game:frame Hear game:frame.

    Code

  • Sky Behind the scenesRuns in the page and on a space's server

    Drops fireflies and raindrops down the five lanes.

    Asks for 1 permission
    • hook:intercept:game:update Change or stop game:update before it happens.

    Code

  • Chime Behind the scenes

    A bell for each catch, a plop for each splash.

    • Needs audio, game
    • In no app yet: add it to one
    Asks for 2 permissions
    • audio Use the audio service: sound for plugins, played by the tab that runs the plugin workers.
    • hook:listen:game:frame Hear game:frame.

    Code

  • Wind Behind the scenes

    Gusts that blow falling things sideways.

    • Needs game
    • In no app yet: add it to one
    Asks for 1 permission
    • hook:intercept:game:update Change or stop game:update before it happens.

    Code

Habits 1

  • Habits On the page

    Tick off today's habits, and keep a streak.

    Asks for 1 permission
    • ui Draw on this page.

    Code

Household 4

  • Chores On the page

    What needs doing around the house, how often, and who did it last.

    Asks for 5 permissions
    • ui Draw on this page.
    • members Use members.
    • hook:listen:members:changed Hear members:changed.
    • bus:read:household-new Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • hook:listen:bus:posted Hear bus:posted.

    Code

  • Honest stamps Behind the scenesRuns on a space's server

    Refuses a change that signs it with someone else's name.

    Asks for 4 permissions
    • data:read:groceries Read the groceries records, and hear when they change.
    • data:read:chores Read the chores records, and hear when they change.
    • hook:intercept:data:beforeWrite:groceries Change or stop data:beforeWrite:groceries before it happens.
    • hook:intercept:data:beforeWrite:chores Change or stop data:beforeWrite:chores before it happens.

    Code

  • Housemates On the page

    Everyone who lives here (the space's members), and who is using this device.

    Asks for 4 permissions
    • ui Draw on this page.
    • members Use members.
    • hook:listen:members:changed Hear members:changed.
    • bus:post:household-new Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.

    Code

  • Shopping list On the page

    What the house needs, who added it, and who got it.

    Asks for 5 permissions
    • ui Draw on this page.
    • members Use members.
    • hook:listen:members:changed Hear members:changed.
    • bus:read:household-new Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • hook:listen:bus:posted Hear bus:posted.

    Code

Invoice 3

  • Add a tip On the page

    Adds a 10% tip line to the items.

    • Draws append #lines, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Pay later On the page

    Swaps the pay button for a reminder to pay on the due date.

    • Draws replace #pay, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Private memo On the page

    A note to yourself about this invoice.

    • Draws prepend main, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 1 permission
    • ui Draw on this page.

    Code

Librarian 3

  • Agent activity On the page

    Lists what the app's agents did: each run, the tools they called, and how it ended.

    Asks for 2 permissions
    • ui Draw on this page.
    • hook:listen:agent:* Hear agent:*.

    Code

  • Bibliographer Agent

    Answers questions about who wrote a book and when, asking you when a title could be more than one book.

    Asks for 4 permissions
    • bus:ask Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • llm Use the llm service: one way for any plugin to ask a language model, whoever makes the model.
    • agent Use agent.
    • bus:inbox Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.

    Code

  • Librarian Agent

    Fills in a book's author and first year of publication when they're missing.

    Asks for 5 permissions
    • data:read:library Read the library records, and hear when they change.
    • data:write:library Change the library records. Unless it made them, you are asked first each time.
    • bus:send:bibliographer Send messages to bibliographer.
    • llm Use the llm service: one way for any plugin to ask a language model, whoever makes the model.
    • agent Use agent.

    Code

Markdown editor 25

  • Assistant alerts On the page

    Tells you when an agent finishes a reply or stops with an error.

    Asks for 2 permissions
    • ui Draw on this page.
    • hook:listen:agent:done Hear agent:done.

    Code

  • Data checker On the page

    Lists every number, date, money amount and quote in the post, and has the writer agent check them.

    Asks for 7 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • bus:send:writer Send messages to writer.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Dictation On the page

    Type by speaking: a Dictate button that puts what you say in at the cursor, with spoken punctuation.

    Asks for 5 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • document:write Use document:write.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Edit and save times On the page

    Shows when you last edited and last saved the post.

    Asks for 6 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:save Hear posts:save.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Emoji On the page

    Insert an emoji from a picker (Mod+Shift+E), with your recent ones first.

    Asks for 3 permissions
    • ui Draw on this page.
    • document:write Use document:write.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Front matter On the page

    A form for the post's front matter: title, date, draft, tags and the rest, each with a control that fits.

    Asks for 7 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • document:write Use document:write.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:save Hear posts:save.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Hugo preview On the page

    Shows the open post as your site's own hugo server renders it, with your theme, next to the editor.

    Asks for 6 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:save Hear posts:save.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Images Behind the scenes

    Saves images you paste or drop on a post next to it (a page bundle) or in static/images/, and puts a Markdown image or Hugo figure for each in the post.

    Asks for 4 permissions
    • document:read Use document:read.
    • document:write Use document:write.
    • hook:intercept:posts:paste Change or stop posts:paste before it happens.
    • hook:intercept:posts:drop Change or stop posts:drop before it happens.

    Code

  • Notifications On the page

    Your computer's notifications when the writer finishes, while you're away from the editor.

    Asks for 3 permissions
    • ui Draw on this page.
    • notify Use the notify service: the operating system's notifications, so a plugin can tell the person something while they are in another tab or app (the writer agent has finished, a long export is done).
    • hook:listen:agent:done Hear agent:done.

    Code

  • Outline On the page

    Shows the post's headings, with words per section, in an Outline panel. Click a heading to jump to it.

    Asks for 5 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Outside agents Behind the scenes

    Lets an agent in your browser read and edit the open post with the writer's tools, through WebMCP.

    Asks for 5 permissions
    • outside Use the outside service: lets agents that live outside the app (a browser's own assistant, Claude Code, any MCP client) use it.
    • commands Use the commands service: things a person (or an agent) can do in an app, named once by the plugin that does them, and run from anywhere: a command palette, a keyboard shortcut, or a model's tool call.
    • document:read Use document:read.
    • document:write Use document:write.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.

    Code

  • Posts Service

    The site's Markdown posts: open one, write, save. Other plugins hear what you do through its hooks, and change the post through its document service.

    Asks for 5 permissions
    • ui Draw on this page.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • folder:write Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • folder:choose Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • provide:document Answer every call this page's plugins make to the document service.

    Code

  • Readability On the page

    Shows the post's reading grade, underlines long sentences, and gives agents a readability report.

    Asks for 6 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • bus:send:writer Send messages to writer.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:close Hear posts:close.

    Code

  • SEO check On the page

    Checks title and description length, heading order, image alt text and link text, and gives agents an SEO report.

    Asks for 6 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • bus:send:writer Send messages to writer.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Snippets On the page

    Insert saved snippets of text (Mod+Shift+X), save the selection as one, or share them in the site's .editor/snippets.json.

    Asks for 5 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • document:write Use document:write.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Spell check On the page

    Checks the spelling as you write, with the browser's spell checker, and accepts the site's tags and its own word list.

    Asks for 6 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • document:write Use document:write.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:save Hear posts:save.

    Code

  • Style guide On the page

    Underlines words your site's style guide replaces or avoids (.editor/style-guide.json), and has the writer agent apply the guide (.editor/style-guide.md).

    Asks for 7 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • bus:send:writer Send messages to writer.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Tag suggester On the page

    Suggests tags the site already uses that fit the post, adds the one you pick, and gives agents a suggest-tags tool.

    Asks for 6 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • document:write Use document:write.
    • bus:send:writer Send messages to writer.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Word count On the page

    Shows the post's word count and reading time in the status bar.

    Asks for 6 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:save Hear posts:save.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Word goal On the page

    Shows progress towards a word count goal, set per post in its panel or with a wordGoal front matter field.

    Asks for 5 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Writer Agent

    Works on the open post: checks it with the editor's reports and edits it, for you to keep or undo.

    Asks for 8 permissions
    • commands Use the commands service: things a person (or an agent) can do in an app, named once by the plugin that does them, and run from anywhere: a command palette, a keyboard shortcut, or a model's tool call.
    • document:read Use document:read.
    • document:write Use document:write.
    • folder:read Use the folder service: a folder of files the person works on, such as a Hugo site: on their disk, if they pick one, or a private folder in the browser until they do.
    • bus:ask Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.
    • llm Use the llm service: one way for any plugin to ask a language model, whoever makes the model.
    • agent Use agent.
    • bus:inbox Use the bus service: how agents and plugins talk to each other and to the person, by message rather than by calling each other.

    Code

  • Writing streak On the page

    Counts the words you write each day and shows your streak of writing days, with a history panel.

    Asks for 4 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.

    Code

  • Autosave On the page

    Saves the post a few seconds after you stop typing, or every few minutes. Pick when in its settings.

    • Needs document
    • In no app yet: add it to one
    Asks for 5 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • document:write Use document:write.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:close Hear posts:close.

    Code

  • Repetition On the page

    Underlines words repeated within a few lines of each other, and shows your most used words.

    • Needs document
    • In no app yet: add it to one
    Asks for 5 permissions
    • ui Draw on this page.
    • document:read Use document:read.
    • hook:listen:posts:open Hear posts:open.
    • hook:listen:posts:change Hear posts:change.
    • hook:listen:posts:close Hear posts:close.

    Code

Menu 2

Reading list 8

  • Book files Behind the scenes

    Adds an ebook (.pdf or .epub) opened with the reading list as a book to read.

    Asks for 2 permissions
    • launch Use the launch service: files opened with an app.
    • data:write:library Change the library records. Unless it made them, you are asked first each time.

    Code

  • Book import On the page

    Paste a list of books to add them to the library.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:write:library Change the library records. Unless it made them, you are asked first each time.

    Code

  • Book page On the page

    Shows one book on its own screen, at book/<id>, so a book can be linked to.

    Asks for 4 permissions
    • ui Draw on this page.
    • router Use the router service: a screen for every address: the reading list opened at /demos/reading-list/book/42 shows the screen `/book/42`, so a person can bookmark or share it, and back and forward move between screens.
    • data:read:library Read the library records, and hear when they change.
    • share Use the share service: sharing out, and sharing in: a plugin can hand a link or some text to the system's share sheet (Web Share), and an app installed from the browser can be a place to share to (a share target), so a page shared from the browser lands in the reading list.

    Code

  • Book share Behind the scenes

    Adds a page shared to the reading list as a book to read, with its link in the notes.

    Asks for 2 permissions
    • share Use the share service: sharing out, and sharing in: a plugin can hand a link or some text to the system's share sheet (Web Share), and an app installed from the browser can be a place to share to (a share target), so a page shared from the browser lands in the reading list.
    • data:write:library Change the library records. Unless it made them, you are asked first each time.

    Code

  • Due soon On the page

    Books due back in the next two weeks, or overdue.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:library Read the library records, and hear when they change.

    Code

  • Library On the page

    The books, with a form to add or edit one and a table of them all.

    Asks for 2 permissions
    • ui Draw on this page.
    • routes Use routes.

    Code

  • Outside agent Behind the scenesRuns in the page and on a space's server

    Lets agents outside the app read the reading list and suggest changes, which you review.

    Asks for 3 permissions
    • outside Use the outside service: lets agents that live outside the app (a browser's own assistant, Claude Code, any MCP client) use it.
    • data:read:library Read the library records, and hear when they change.
    • data:write:library Change the library records. Unless it made them, you are asked first each time.

    Code

  • Reading goal On the page

    How far you are towards reading 12 books this year.

    • Draws prepend main, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:library Read the library records, and hear when they change.

    Code

Recipes 4

  • Cookbook On the page

    Recipes, and the open recipe scaled to how many you're feeding.

    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Kitchen timer On the page

    A timer for the open recipe, in the room the cookbook leaves for it.

    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Quick meals On the page

    Recipes you can make in the time you have.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:recipes Read the recipes records, and hear when they change.

    Code

  • Shopping list On the page

    A shopping list you can fill from a recipe.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:recipes Read the recipes records, and hear when they change.

    Code

Security 1

  • Security Agent

    Stops card numbers being saved in the library, and checks what the other agents are about to do.

    Asks for 5 permissions
    • data:read:library Read the library records, and hear when they change.
    • llm Use the llm service: one way for any plugin to ask a language model, whoever makes the model.
    • agent Use agent.
    • hook:intercept:data:beforeWrite:library Change or stop data:beforeWrite:library before it happens.
    • hook:intercept:agent:beforeTool Change or stop agent:beforeTool before it happens.

    Code

Spending 3

  • Budget On the page

    Spending against a monthly budget.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:expenses Read the expenses records, and hear when they change.

    Code

  • By category On the page

    Spending split by category.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:expenses Read the expenses records, and hear when they change.

    Code

  • Expenses On the page

    The expenses, in a table, with a form to add one.

    Asks for 1 permission
    • ui Draw on this page.

    Code

Surveys 2

  • Survey answers Behind the scenesRuns on a space's server

    Serves each survey as a public form on the space's server, keeps the answers, and emails a daily digest.

    Asks for 4 permissions
    • routes Use routes.
    • schedule Use the schedule service: work a plugin wants done later, once or again and again, with the `schedule` permission.
    • email Use the email service: mail a server plugin sends, with the `email` permission.
    • data:read:surveys Read the surveys records, and hear when they change.

    Code

  • Surveys On the page

    Build surveys, share a link anyone can answer, and see the answers come in.

    Asks for 4 permissions
    • ui Draw on this page.
    • data:read:answers Read the answers records, and hear when they change.
    • sync Use the sync service: what lets an app open in a space (/s/<space>/…) and be shared by its members.
    • share Use the share service: sharing out, and sharing in: a plugin can hand a link or some text to the system's share sheet (Web Share), and an app installed from the browser can be a place to share to (a share target), so a page shared from the browser lands in the reading list.

    Code

Trails 6

  • Activities On the page

    The log: a feed of activity cards, and a form to add one.

    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Personal bests On the page

    Longest, fastest and highest, from the log.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:activities Read the activities records, and hear when they change.

    Code

  • Weekly distance On the page

    Twelve weeks of distance, stacked by kind, on a canvas.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:activities Read the activities records, and hear when they change.

    Code

  • Year On the page

    A year of activity, a square a day.

    Asks for 2 permissions
    • ui Draw on this page.
    • data:read:activities Read the activities records, and hear when they change.

    Code

  • Forest theme On the page

    Moss and pine, light and dark.

    • In no app yet: add it to one
    Asks for 1 permission
    • ui:theme Change the app's colours and shapes.

    Code

  • Miles On the page

    Shows the log's distances in miles.

    • Draws replace each [data-km] in activities, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 2 permissions
    • ui Draw on this page.
    • ui:transform:activities Change how activities's view looks.

    Code

Trip 3

  • Countdown On the page

    How many days until the trip, under the heading.

    • Draws after h1[data-start], so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Packing list On the page

    What to pack, at the bottom of the page.

    • Draws prepend footer, so it works on a page with no slot for it
    • In no app yet: add it to one
    Asks for 1 permission
    • ui Draw on this page.

    Code

  • Plum theme On the page

    Plum accents and rounder corners for the whole app.

    • In no app yet: add it to one
    Asks for 1 permission
    • ui:theme Change the app's colours and shapes.

    Code

This site's pages

The home page, the workbench and the docs are made of plugins too: each chapter of the home page's story, the workbench's examples, and the docs' panel.