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 ryan-haver/fusebase-mcp --skill app-dev-practicesgit clone --depth 1 https://github.com/ryan-haver/fusebase-mcpWrote 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/ryan-haver/fusebase-mcp/app-dev-practices)<a href="https://agentmods.dev/skills/ryan-haver/fusebase-mcp/app-dev-practices"><img src="https://agentmods.dev/badge/skills/ryan-haver/fusebase-mcp/app-dev-practices/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/ryan-haver/fusebase-mcp/app-dev-practices"><img src="https://agentmods.dev/badge/skills/ryan-haver/fusebase-mcp/app-dev-practices.svg" alt="Reviewed on agentmods" width="80" 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.00084 | $0.02509 |
| Opus 5.5 | $0.00034 | $0.01004 |
| Sonnet 5.5 | $0.00017 | $0.00502 |
| Haiku 4.5 | $0.00008 | $0.00251 |
Grade A, and why
app-dev-practices 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 2d 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 — 238 lines — stays where its author put it; the contents beside it link to each section on GitHub.
App Dev Practices
Always Scaffold First
Run fusebase scaffold --template spa --dir apps/<name> before writing any app files. This generates the canonical React + Vite + Tailwind v4 + shadcn/ui project structure. For apps needing a backend, also run fusebase scaffold --template backend --dir apps/<name>. Customize from there — never recreate boilerplate by hand.
Multi-User by Default
Every app is multi-user. Multiple users access the same deployed app simultaneously, each with their own identity (app token). Never design for a single user.
Rules:
-
Per-user state (OAuth tokens, preferences, selections) must be stored per-user — use httpOnly cookies (set by the server, scoped to the user's browser) or dashboard rows keyed by user ID
-
Shared env vars / Fusebase secrets are global — they are the same for all users. Never use them for per-user credentials or settings
-
In-memory backend variables are shared across all requests from all users — never store per-user data in module-level variables
-
When integrating third-party APIs with OAuth, each user must go through their own auth flow and get their own tokens
-
Stable partition keys only: when storing per-user rows, the partition key must come from a stable identity (
userId,orgUserId, email if immutable), not from session/token artifacts. -
Never use token-derived keys (e.g.
ft:*, JWT fragments, rotating session IDs) as persistentuser_key/partition keys — they change between sessions and split one user's data into multiple buckets. -
Recommended format: normalize once in backend (
user:<userId>) and reuse the same key for both read and write paths.
Ask yourself: "If two users open this app at the same time, will they interfere with each other?" If yes, the design is wrong.
Project Structure
Apps are React/Vite apps in apps/:
apps/
my-app/
package.json
vite.config.ts
src/
App.tsx
main.tsx
Use existing apps in apps/ as reference when building new ones.
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.
- 2d ago Changed · +2 lines 6951ed90ad03
- 3d ago Changed · -4 lines 1b375bb41778
- 1mo ago First seen · 240 lines · 84 tokens per session scan A 1c2e28f94f31
app-dev-practices is a skill published in the GitHub repository ryan-haver/fusebase-mcp (8 stars, last pushed 3d ago), licensed MIT. It adds 84 tokens to every session and 2,509 once invoked, about $0.0003 per session on Opus 5.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-09-13.
app-dev-practices compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| app-dev-practicesryan-haver/fusebase-mcp | Skill | 8 | 3d ago | MIT | A | 84 | Claude Code |
| hr-onboardingnexu-io/open-design | Skill | 107k | today | Apache-2.0 | A | 62 | Claude Code, Codex |
| book-mirrorgarrytan/gbrain | Skill | 32k | today | MIT | A | 138 | Claude Code |
| exam-forecastanthropics/claude-for-legal | Skill | 9.9k | today | Apache-2.0 | A | 73 | Claude Code |
| lean-formalizewanshuiyin/Auto-claude-code-research-in-sleep | Skill | 19k | 2d ago | MIT | A | 81 | Claude Code |
| eli5companion-inc/feynman | Skill | 10k | today | MIT | A | 63 | Claude Code, Codex |
| deck-course-modulenexu-io/html-anything | Skill | 9.5k | today | Apache-2.0 | A | 25 | Claude Code, Codex |