Skip to content
Agent Orchestration
Skill

/mulmoterminal-shared-app

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

BOOST
From plugin
mulmoterminal
24574 skills
Install
$ npx -y skills add receptron/mulmoterminal --skill mulmoterminal-shared-app --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/mulmoterminal-shared-app

Context 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

SKILL.md

mulmoterminal-shared-app.SKILL.md
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.

Something other people use

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.

What a shared app is

  • **One repository is one app.** The folder this session is open in becomes the app; its

declaration is `app.json` at the root.

  • **The definition is committed; the answers are not.** Schemas and views are files in the

repository. Records live in the app's cloud store, so everyone sees the same rows.

  • **Who may do what is a list of email addresses** in `app.json`. Inviting somebody is adding a

line and publishing — they need no account here and no repository.

Start from a template when one fits

These shapes are written out in full — declaration, schemas, and the reasoning behind each key:

  • **[templates/salon.md](./templates/salon.md)** — a request that a NAMED PERSON approves, and only

their own (a salon's bookings, interviews, repairs, review assignments). This is what `assignee` is for.

  • **[templates/gym.md](./templates/gym.md)** — **first come, first served**, with a waiting list and

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.

  • **[templates/survey.md](./templates/survey.md)** — **collecting answers**, with nothing to run out

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.

  • **[templates/meeting-room.md](./templates/meeting-room.md)** — a bookable unit you can LIST IN

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.

  • **[templates/class-seats.md](./templates/class-seats.md)** — a class with a CAPACITY whose

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.

  • **[templates/schedule-poll.md](./templates/schedule-poll.md)** — a SCHEDULING POLL (調整さん /

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.

  • **[templates/question-box.md](./templates/question-box.md)** — a QUESTION BOX: anyone sends a

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.

  • **[templates/tally.md](./templates/tally.md)** — ONLY THE TOTALS: visitors see how many chose each

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.

  • **[templates/survey-results.md](./templates/survey-results.md)** — a SURVEY WHOSE CHOICE TOTALS

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.

  • **[templates/live-poll.md](./templates/live-poll.md)** — a page that MOVES while people are looking

at it (a live stream, a lecture, a stand-up quiz). This is what `views[].live` is for, and the only

Read more
Ships withmulmoterminal

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.

Get the whole plugin
Stats
255
Stars
32
Forks
Active
Maintenance
TypeScript
Language
MIT
License
4h ago
Last commit
4mo ago
Created
18h ago
Added

Repo: receptron/mulmoterminal

Other skills on mulmoterminal.