apply
Set chaff up in the folder: chaff.yaml for the chosen genre, today's findings shelved in .chaff-baseline.json, and, when asked, a…
Build something several people use together — a survey, a sign-up sheet, a booking form, a shared list, a form on a link — where the answers are kept in one place rather than on this machine. Use when the user asks for anything other people will fill in or read, and when they
$ npx -y skills add receptron/mulmoterminal --skill mulmoterminal-shared-app --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/mulmoterminal-shared-appContext preview
The summary Claude sees to decide when to auto-load this skill.
Build something several people use together — a survey, a sign-up sheet, a booking form, a shared list, a form on a link — where the answers are kept in one place rather than on this machine. Use when the user asks for anything other people will fill in or read, and when they
name: mulmoterminal-shared-app description: Build something several people use together — a survey, a sign-up sheet, a booking form, a shared list, a form on a link — where the answers are kept in one place rather than on this machine. Use when the user asks for anything other people will fill in or read, and when they later say show it to someone, invite an address, publish it, or take it down. Turns the request into a shared app in this repository and drives publish / unpublish. Works in whatever language the user writes in.
A request like "make a survey for my talk", "I need a sign-up sheet", "let people book a slot", "a form I can send a link to" is asking for a SHARED APP — a thing that lives on the web, keeps its answers in one place, and can be handed to people who do not have this repository or this machine.
**Do not offer a printable page, a Google Form, or a stand-alone HTML form as the answer.** They are what this looked like before there was anywhere to keep the answers, and each of them leaves the user to solve the actual problem — where the responses go — by themselves. Offer them only if the user turns this down.
declaration is `app.json` at the root.
repository. Records live in the app's cloud store, so everyone sees the same rows.
line and publishing — they need no account here and no repository.
These shapes are written out in full — declaration, schemas, and the reasoning behind each key:
their own (a salon's bookings, interviews, repairs, review assignments). This is what `assignee` is for.
a per-class opening time (a gym class, a workshop, a slot booking). This is what `stampField` and `window.fromField` are for, and it explains why the capacity lives in the VIEW and not in the rules.
of (a survey, a quiz, an application form, a sign-up with no cap). The shortest declaration of them all, and the shape most often written with a public page and nothing else — so this one is built around its `member` page, which is where the answers are read. It also spells out the three-way trade above, and what a tally may and may not claim about values a respondent typed.
ADVANCE, taken on the spot with no approval (a meeting room, a desk, equipment on loan, a parking space). This is what `idFrom: "field"` and `mirror` are for, and it is the one that spells out who refills the slots, and what a cancellation does NOT do.
visitors see "N left" and never who booked (a dance class, a workshop, a trial lesson). The meeting-room shape once per PLACE: a class of 20 is 20 seat records, each taken like a slot, and the page counts the open ones — the rules cannot count, so the capacity is the number of seats. Read it for why the booking window points at the SEAT and not at the class.
Doodle): candidate dates, ○△× per date, everyone sees the table, a participant corrects their own answer with `view.correct`, and the organiser closes it by moving `closesAt`. Names are meant to be seen here, which is the opposite of class-seats.
question with no sign-in, the owner answers on `/m/`, and only the rows the owner chose to publish reach the public page (a talk's Q&A, a shop's FAQ, an anonymous question box). This is what `public.readPublished` + `publishField` are for: the rules, not the page, keep the rest away, and publishing is the owner's switch on `/m/{slug}/records/{cid}` — never a page's write, because `view.correct` sends strings and the flag is a boolean.
answer and nothing else (a "which do you like?" result, a quiz's spread, an event's preference poll). Not a key but a split: the counted field lives in `votes` (`public.read`, nothing else in it), names and comments in `notes` (nobody's to read but the owner's), joined by the same per-app pseudonym, and the page counts. It is also the template that sends TWO records as two presses — one write per press, or the second loses the gesture mark and the preview drops it.
ARE PUBLIC: the survey.md form, plus per-question counts and shares shown to a respondent after they answer, while the address, name and free text stay with the owner. The tally split again: the chosen answers in `tallies` (`public.read`, `answers` + `status` only, no `emailField`), the rest in `responses` (private), joined by pseudonym. Read it for why the public page counts only declared questions and choices and never draws a string it read from a tally — `answers` is free text anyone can write. Showing results is the author's choice; survey.md stays the default.
at it (a live stream, a lecture, a stand-up quiz). This is what `views[].live` is for, and the only
Run multiple coding-agent sessions in parallel — and see which one needs you. A browser terminal for parallel AI coding agents: several sessions side by side, each in its own cell, with the one that needs you marked in colour.
Set chaff up in the folder: chaff.yaml for the chosen genre, today's findings shelved in .chaff-baseline.json, and, when asked, a…
Measure what chaff reports on the named documents today, as the kind the person chose, and propose the setup — changing nothing…
Answer each question from the named documents only, quoting where the answer is written, or saying plainly that the documents do…
Add the approved answers to FAQ.md when the person chose to keep them, after what it already holds; change nothing otherwise.
Build the spec's operations as the Worker's API, with validation and tests.