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 agentmods add skills/blocunited-llc/mozaiks/add-modulenpx skills add BlocUnited-LLC/mozaiks --skill add-modulegit clone --depth 1 https://github.com/BlocUnited-LLC/mozaiksWrote 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/blocunited-llc/mozaiks/add-module)<a href="https://agentmods.dev/skills/blocunited-llc/mozaiks/add-module"><img src="https://agentmods.dev/badge/skills/blocunited-llc/mozaiks/add-module.svg" alt="Measured on agentmods" height="20"></a>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.00023 | $0.04446 |
| Opus 5 | $0.00012 | $0.02223 |
| Sonnet 5 | $0.00005 | $0.00889 |
| Haiku 4.5 | $0.00002 | $0.00445 |
Grade A, and why
add-module 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 5d 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 — 572 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Before starting: git fetch origin && gh pr list --state open && git log origin/main --oneline -3 — if another agent has an open PR touching the same files you need, wait for it to merge or branch off it instead of main.
Help the user add a backend module to an existing Mozaiks application.
A module is deterministic backend logic: CRUD actions, domain data, business rules. It runs without AI. For AI-driven behavior, use a workflow instead. Modules support workflows — they provide the action surface that AI agents call.
What a Module Is
app/modules/{name}/
├── module.yaml ← required: identity, permissions, actions; optional: capabilities[]
├── contracts/ ← optional companion manifests
│ ├── events.yaml ← domain events this module may publish
│ ├── reactions.yaml ← event reactions owned by this module
│ ├── notifications.yaml ← notification rules derived from events
│ ├── settings.yaml ← user/app settings schema
│ ├── admin.yaml ← admin panels (omit if none)
│ └── profile.yaml ← optional user profile page panels
├── runtime_extensions.yaml ← optional: api_router / startup_service
└── backend/
├── __init__.py
├── handler.py ← required — thin dispatch, one method per action
├── service.py ← recommended — all business logic and event emission
├── repo.py ← recommended — MongoDB access, no logic
├── policy.py ← recommended — multi-tenancy query scoping
├── schemas.py ← recommended — typed shapes + pure helpers
└── {helper_files}.py ← optional — declared, justified, module-local support
Only module.yaml and backend/handler.py are required. Add companion manifests
under contracts/ only when the module needs them.
Use contracts/reactions.yaml as the canonical event-reaction contract.
The runtime rejects contracts/subscriptions.yaml; module changes must author
contracts/reactions.yaml.
For SaaS apps: set actions[].entitlement_gate to a capability_id string on
user-facing actions that require an active plan grant. ModuleExecutor checks
EntitlementPort before dispatch and returns ENTITLEMENT_REQUIRED on denial.
Non-SaaS apps use NoOpEntitlementAdapter — no configuration needed. Never set
entitlement_gate on admin_internal actions.
Event/reaction contract summary:
contracts/events.yamldeclares the events this module may emit.module.yaml.actions[].emitsmust reference event types declared there.contracts/reactions.yamlusesschema_version: mozaiks.reactions.v1, root keyreactions,event_type, and nestedtarget.kind.- Reaction targets use
target.handler_method,target.capability_id, ortarget.notification_iddepending ontarget.kind. contracts/notifications.yamldeclares notification rules derived from events and is separate from reaction routing.
The runtime auto-discovers and registers all modules at startup.
Module routes are auto-mounted at /api/modules/{name}/{action_id}.
Pages should call those routes without query strings. Put list limits in
page_size and filters or selected-row values in action payloads, form state,
or the module action input schema.
Modules that need persistent app chrome access should expose a real page route
and put navigation intent on that page. For example, a communications module
that owns /messages should give the Messages page navigation.scope: global
when it is a primary destination, or navigation.scope: profile when it is
account-adjacent. Use app/config/shell.json -> shortcuts for built-in profile,
auth, notification, and footer chrome rather than hardcoding menu entries.
The page also owns chrome intent through shell_mode: use conversation for
DM/chat/thread pages so the mobile bottom bar and footer do not compete with the
composer, and workspace for inbox, queue, profile, or management surfaces.
Module runtime output must be production-honest. Do not return sample, demo,
mock, fake, placeholder, random, or hardcoded KPI data from module actions.
Summary/stat/metric/count actions must query repo/MongoDB state or return honest
empty values (0, [], null). Trend/change fields require a real historical
comparison or metrics snapshot; otherwise omit them or return null.
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.
- 5d ago First seen · 572 lines · 23 tokens per session scan A d1db29a302f0
add-module is a skill published in the GitHub repository BlocUnited-LLC/mozaiks (25 stars, last pushed today), licensed MIT. It adds 23 tokens to every session and 4,446 once invoked, about $0.0001 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
add-new-model
Add support for a newly-released LLM model in pydantic-ai (e.g. openai:gpt-5.6, anthropic:claude-sonnet-5). Use when a provider ships a new model id and you need to wire literals, profile flags, and tests to recognize it. Handles SDK-lag, gateway list conventions, and capability probing.
building-pydantic-ai-agents
Build AI agents with Pydantic AI — tools, capabilities (including on-demand loading), structured output, streaming, testing, and multi-agent patterns. Use when the user mentions Pydantic AI, imports pydanticai, or asks to build an AI agent, add tools/capabilities, defer capability loading, stream output, define agents…
complete-partial-pr
Evaluate and complete an issue or PR where the submitted patch fixes only a narrow symptom of the reported pain point. Use when a contribution may miss adjacent integration surfaces, provider/spec semantics, roundtrip behavior, tests, docs, or historical maintainer decisions.
testing-skill
Record, rewrite, and debug VCR cassettes for HTTP recordings. Use when running tests with --record-mode, verifying cassette playback, or inspecting request/response bodies in YAML cassettes.
pre-push-review
Run a high-judgment local review of the current branch before pushing, both before a PR exists and between PR iterations.
adding-a-provider-api-feature
Add a new provider API capability (prompt caching, strict/structured tool calling, thinking/reasoning effort, service tier, safety settings, logprobs, etc.) to Pydantic AI. Use when wiring a provider feature through the library — it enforces reasoning from the existing cross-provider abstraction before designing…