Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add receptron/mulmoterminal --skill mulmoterminal-shared-appgit clone --depth 1 https://github.com/receptron/mulmoterminalWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/receptron/mulmoterminal/mulmoterminal-shared-app)<a href="https://agentmods.dev/skills/receptron/mulmoterminal/mulmoterminal-shared-app"><img src="https://agentmods.dev/badge/skills/receptron/mulmoterminal/mulmoterminal-shared-app/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/receptron/mulmoterminal/mulmoterminal-shared-app"><img src="https://agentmods.dev/badge/skills/receptron/mulmoterminal/mulmoterminal-shared-app.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 3 findings, up to high
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- high Rogue Agent · line 988 Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.Fix: Prevent the skill from modifying its own code, SKILL.md, or configuration files. Treat skill files as read-only at runtime.
- medium Excessive Agency · line 44 Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.Fix: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
- medium Tool Misuse · line 386 Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.Fix: Override unsafe defaults with secure settings (verify=True, auth required, restrictive permissions). Review and harden all tool configurations.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00114 | $0.23906 |
| Opus 5 | $0.00057 | $0.11953 |
| Sonnet 5 | $0.00023 | $0.04781 |
| Haiku 4.5 | $0.00011 | $0.02391 |
Grade A, and why
mulmoterminal-shared-app scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 1,397 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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.jsonat 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
Nine shapes are written out in full — declaration, schemas, and the reasoning behind each key:
- 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
assigneeis for. - 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
stampFieldandwindow.fromFieldare for, and it explains why the capacity lives in the VIEW and not in the rules. - 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 the
nine, and the shape most often written with a public page and nothing else — so this one is built
around its
memberpage, 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 — 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"andmirrorare for, and it is the one that spells out who refills the slots, and what a cancellation does NOT do. - 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[].liveis for, and the only one whose declaration is decided by FAN-OUT: the audience may watch the questions, only the desk may watch the votes, and the shape that would let both is refused by publish. In English, because the strings in its pages are what a stranger reads. - templates/project-board.md — the same work-claiming board with
a ROSTER and an owner's desk: people register a name once (
names,idFrom: "auth.uid"), then take work; the owner adds and removes tasks and frees an abandoned one from/m/. This is whatwriterDeleteis for, and the one that spells outview.mine()'s three states — "you have not registered" and "nobody looked" are different answers, and treating them alike shows the registration form to somebody who has already registered. It also shows the owner-only form: apublic.submitdeclaration whose window is CLOSED, which is how a page gets a create form that only a writer may send. - templates/append-feed.md — a record a CLOSED GROUP writes to and
nobody rewrites: rows are only ever added, and only their author may remove one (a shift handover
note, an incident timeline, a team log, a class's question board, a chat room). This is what
views[].limitis for — the one shape whose collection grows with the app's AGE rather than with the thing being booked — and the one wherewriterDeleteis deliberately ABSENT, which isproject-board.mdturned over: an owner pressing delete on somebody else's row is refused by Firestore. It is also the only sample showingpublic.enabled: falsebeside a populatedpublic.submit, which is the pair the naming makes look contradictory. - templates/ai-council.md — a discussion the participants are AI
AGENTS rather than people, held in public, which a human host can END (a debate, a design review
by several models, a red-team panel). This is what
agents[]is for — the app publishes the JOB beside the pages, so an agent at another MulmoTerminal takes a seat from the slug alone, with no copy of your repository. It is also the only sample that has to bind its own OWNER: every agent here signs in as the owner, so the host's close is enforced byrefIn, atransitionsmap with no exit, andsealedtogether — any one alone is walked around in two writes. Read it for what a declaration can and cannot hold when the writer is an agent you handed your sign-in to. - templates/magazine.md — several writers publishing things to READ,
each at its own URL, each signing their own and editing nobody else's (a team blog, a newsletter's
back issues, a research log, release notes, a review column). This is what
views[].articleis for — the platform draws the article page, so the app declares which fields are the title, the body and the byline, andidFrom: "slug"makes the writer's chosen name the document id and freezes it. It is the only sample that states aprotocolof its own, the only one whoselimitis a COST — publish works it out in bytes and refuses the declaration when it is too large — and the one that explains why the owner has to holdparticipanton their own collection —audienceforcessubmitOnly,submitOnlycloses the writer branch, and an owner who skips it cannot publish at all. Read it before any app where a record is something a stranger is meant to sit and read.
What ships with it
10 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago Changed · +61 lines 57fda9ec2a8f
- 12d ago First seen · 1,336 lines · 114 tokens per session scan A b310c31447f8
mulmoterminal-shared-app is a skill published in the GitHub repository receptron/mulmoterminal (212 stars, last pushed today), licensed MIT. It adds 114 tokens to every session and 23,906 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
sdlc-accelerate
End-to-end SDLC ramp-up from idea to construction-ready with automated phase transitions.
infer-completion-criteria
Infer measurable completion criteria for an agent-loop task from project docs, code, and AIWG standards when the user has not supplied --completion explicitly.
nl-router
Route natural language requests to appropriate skills and workflows by parsing intent and matching trigger patterns.
ralph-memory
Manage Al semantic memory entries — list, query, and clear lessons learned across loop iterations.
project-awareness
Detect project type, AIWG framework state, team configuration, and active work to summarize status and recommend next actions.
summarize-transcript
Analyze and summarize a transcript, meeting notes, or discussion thread into a clear actionable document.