Wardian docs

Meeting notes

Try it

The app runs here in your browser. Nothing you type leaves it; what it saves stays in this browser, and Claude is off here. Open it on its own.

Download meeting-notes.wardian Import it in Wardian: Settings → Import.

A Wardian suite: five sealed apps that turn raw meeting notes into a summary, decisions, a checklist and open questions. It is plain JavaScript, with no WebAssembly. It shows claude:sample (AI inside an app) and what an app does when AI is not there.

AppSlotJobContract
notesasideThe meeting's name and its notes or transcript: typed, pasted, dropped, or opened from a .txt or .md file. A sample meeting to try. Remembers them.emits notes:changed (retained); storage
aiasideThe only part that reads the notes. Owns every call to Claude, the progress bar with Stop, the error messages, and the quick reader that needs no AI.listens notes:changed; emits notes:extracted (retained); storage, claude:sample
summarymainThe summary, the decisions and the open questions, and who read them.listens notes:extracted
actionsmainThe action items as a checklist you own: tick, edit owner, task and due date, remove, add.listens notes:extracted; emits actions:changed (retained); storage
exportmainEverything as Markdown: download it, copy it, or read it in place.listens notes:extracted, actions:changed; claude:downloads

How a change flows: you type in notes → it emits notes:changed → ai reads the notes, with Claude when you press Read with Claude, or with the quick reader → it emits notes:extracted → summary, actions and export draw. When you tick an item, actions emits actions:changed, and export writes the tick into the Markdown.

With and without Claude#

ctx.cap('sample') resolves to null when this Wardian has no Claude provider. Then:

With Claude set up, the quick reader still shows its result at once. Your notes go to Claude only when you press Read with Claude; the first time, Wardian asks you to allow it. ai calls sample.json(prompt, { signal }) and checks that the answer has the expected shape (shared/text.js, Text.reading). Wardian runs the request as a background job and hands back the whole answer at once, so the bar shows a running clock rather than a share done. Stop aborts the AbortSignal.

Every error code in SPEC.md 6.6 has its own message (apps/ai/claude.js):

CodeWhat the app says and does
not_grantedYou did not allow Claude; press again to be asked, or change it in Settings → Permissions.
rate_limitedWait a minute, then try again.
refusedClaude declined to read these notes.
invalid_jsonThe answer was not in the expected form; try again.
prompt_too_largeThe notes are too long: shorten them or split the meeting. The app checks this before it sends anything.
cancelledStopped. Nothing changes.
errorCould not reach Claude, with the reason.

After any failure but Stop, the quick reader's result shows, with a note that says why. A reading by Claude of the same notes is never replaced by a quick one. When you change the notes after Claude read them, its reading stays, marked as out of date, until you ask again.

Saved state#

notes keeps the notes, ai the latest reading, and actions your checklist, each in ctx.store. A reload shows the same reading with the same ticks. When a new reading arrives, actions keeps your ticks on items with the same task, keeps your edits, and keeps the items you added.

Limits#

This page is apps/meeting-notes/README.md in the repository. Something wrong or missing? Change that file.