tribunal-kit 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +187 -220
  4. package/.agent/agents/ai-code-reviewer.md +199 -233
  5. package/.agent/agents/backend-specialist.md +215 -238
  6. package/.agent/agents/code-archaeologist.md +161 -181
  7. package/.agent/agents/database-architect.md +184 -207
  8. package/.agent/agents/debugger.md +191 -218
  9. package/.agent/agents/dependency-reviewer.md +103 -136
  10. package/.agent/agents/devops-engineer.md +218 -238
  11. package/.agent/agents/documentation-writer.md +201 -221
  12. package/.agent/agents/explorer-agent.md +160 -180
  13. package/.agent/agents/frontend-reviewer.md +160 -194
  14. package/.agent/agents/frontend-specialist.md +248 -237
  15. package/.agent/agents/game-developer.md +48 -52
  16. package/.agent/agents/logic-reviewer.md +116 -149
  17. package/.agent/agents/mobile-developer.md +200 -223
  18. package/.agent/agents/mobile-reviewer.md +162 -195
  19. package/.agent/agents/orchestrator.md +181 -211
  20. package/.agent/agents/penetration-tester.md +157 -174
  21. package/.agent/agents/performance-optimizer.md +183 -203
  22. package/.agent/agents/performance-reviewer.md +178 -211
  23. package/.agent/agents/product-manager.md +142 -162
  24. package/.agent/agents/product-owner.md +6 -25
  25. package/.agent/agents/project-planner.md +142 -162
  26. package/.agent/agents/qa-automation-engineer.md +225 -242
  27. package/.agent/agents/security-auditor.md +174 -194
  28. package/.agent/agents/seo-specialist.md +193 -213
  29. package/.agent/agents/sql-reviewer.md +161 -194
  30. package/.agent/agents/supervisor-agent.md +184 -203
  31. package/.agent/agents/swarm-worker-contracts.md +17 -17
  32. package/.agent/agents/swarm-worker-registry.md +46 -46
  33. package/.agent/agents/test-coverage-reviewer.md +160 -193
  34. package/.agent/agents/test-engineer.md +0 -21
  35. package/.agent/agents/type-safety-reviewer.md +175 -208
  36. package/.agent/patterns/generator.md +9 -9
  37. package/.agent/patterns/inversion.md +12 -12
  38. package/.agent/patterns/pipeline.md +9 -9
  39. package/.agent/patterns/reviewer.md +13 -13
  40. package/.agent/patterns/tool-wrapper.md +9 -9
  41. package/.agent/rules/GEMINI.md +63 -63
  42. package/.agent/scripts/compress_skills.py +167 -0
  43. package/.agent/scripts/consolidate_skills.py +173 -0
  44. package/.agent/scripts/deep_compress.py +202 -0
  45. package/.agent/scripts/minify_context.py +80 -0
  46. package/.agent/scripts/security_scan.py +1 -1
  47. package/.agent/scripts/strip_tribunal.py +41 -0
  48. package/.agent/skills/agent-organizer/SKILL.md +92 -126
  49. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  50. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +126 -160
  51. package/.agent/skills/api-patterns/SKILL.md +123 -215
  52. package/.agent/skills/api-security-auditor/SKILL.md +143 -177
  53. package/.agent/skills/app-builder/SKILL.md +326 -50
  54. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  55. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  56. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  57. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  58. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  59. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  60. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  61. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  62. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  63. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  64. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  65. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  66. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  67. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  68. package/.agent/skills/appflow-wireframe/SKILL.md +87 -121
  69. package/.agent/skills/architecture/SKILL.md +82 -252
  70. package/.agent/skills/authentication-best-practices/SKILL.md +139 -173
  71. package/.agent/skills/bash-linux/SKILL.md +120 -154
  72. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  73. package/.agent/skills/brainstorming/SKILL.md +428 -104
  74. package/.agent/skills/building-native-ui/SKILL.md +143 -174
  75. package/.agent/skills/clean-code/SKILL.md +323 -360
  76. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  77. package/.agent/skills/config-validator/SKILL.md +107 -141
  78. package/.agent/skills/csharp-developer/SKILL.md +468 -528
  79. package/.agent/skills/database-design/SKILL.md +104 -369
  80. package/.agent/skills/deployment-procedures/SKILL.md +111 -145
  81. package/.agent/skills/devops-engineer/SKILL.md +295 -332
  82. package/.agent/skills/devops-incident-responder/SKILL.md +79 -113
  83. package/.agent/skills/doc.md +5 -5
  84. package/.agent/skills/documentation-templates/SKILL.md +19 -63
  85. package/.agent/skills/edge-computing/SKILL.md +123 -157
  86. package/.agent/skills/extract-design-system/SKILL.md +100 -134
  87. package/.agent/skills/framer-motion-expert/SKILL.md +111 -855
  88. package/.agent/skills/frontend-design/SKILL.md +151 -499
  89. package/.agent/skills/game-design-expert/SKILL.md +71 -105
  90. package/.agent/skills/game-engineering-expert/SKILL.md +88 -122
  91. package/.agent/skills/geo-fundamentals/SKILL.md +89 -124
  92. package/.agent/skills/github-operations/SKILL.md +279 -314
  93. package/.agent/skills/gsap-expert/SKILL.md +119 -826
  94. package/.agent/skills/i18n-localization/SKILL.md +104 -138
  95. package/.agent/skills/intelligent-routing/SKILL.md +159 -127
  96. package/.agent/skills/lint-and-validate/SKILL.md +8 -52
  97. package/.agent/skills/llm-engineering/SKILL.md +344 -357
  98. package/.agent/skills/local-first/SKILL.md +120 -154
  99. package/.agent/skills/mcp-builder/SKILL.md +84 -118
  100. package/.agent/skills/mobile-design/SKILL.md +213 -219
  101. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  102. package/.agent/skills/nextjs-react-expert/SKILL.md +99 -698
  103. package/.agent/skills/nodejs-best-practices/SKILL.md +498 -559
  104. package/.agent/skills/observability/SKILL.md +293 -330
  105. package/.agent/skills/parallel-agents/SKILL.md +88 -122
  106. package/.agent/skills/performance-profiling/SKILL.md +217 -254
  107. package/.agent/skills/plan-writing/SKILL.md +84 -118
  108. package/.agent/skills/platform-engineer/SKILL.md +89 -123
  109. package/.agent/skills/playwright-best-practices/SKILL.md +128 -162
  110. package/.agent/skills/powershell-windows/SKILL.md +112 -146
  111. package/.agent/skills/python-patterns/SKILL.md +7 -35
  112. package/.agent/skills/python-pro/SKILL.md +148 -754
  113. package/.agent/skills/react-specialist/SKILL.md +123 -827
  114. package/.agent/skills/readme-builder/SKILL.md +15 -85
  115. package/.agent/skills/realtime-patterns/SKILL.md +269 -304
  116. package/.agent/skills/red-team-tactics/SKILL.md +10 -51
  117. package/.agent/skills/rust-pro/SKILL.md +623 -701
  118. package/.agent/skills/seo-fundamentals/SKILL.md +120 -154
  119. package/.agent/skills/server-management/SKILL.md +156 -190
  120. package/.agent/skills/shadcn-ui-expert/SKILL.md +172 -206
  121. package/.agent/skills/skill-creator/SKILL.md +18 -58
  122. package/.agent/skills/sql-pro/SKILL.md +579 -633
  123. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +28 -68
  124. package/.agent/skills/swiftui-expert/SKILL.md +142 -176
  125. package/.agent/skills/systematic-debugging/SKILL.md +84 -118
  126. package/.agent/skills/tailwind-patterns/SKILL.md +516 -576
  127. package/.agent/skills/tdd-workflow/SKILL.md +103 -137
  128. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  129. package/.agent/skills/testing-patterns/SKILL.md +512 -573
  130. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  131. package/.agent/skills/ui-ux-pro-max/SKILL.md +0 -41
  132. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  133. package/.agent/skills/vue-expert/SKILL.md +127 -866
  134. package/.agent/skills/vulnerability-scanner/SKILL.md +354 -269
  135. package/.agent/skills/web-accessibility-auditor/SKILL.md +159 -193
  136. package/.agent/skills/web-design-guidelines/SKILL.md +17 -61
  137. package/.agent/skills/webapp-testing/SKILL.md +111 -145
  138. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  139. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  140. package/.agent/workflows/api-tester.md +151 -151
  141. package/.agent/workflows/audit.md +127 -138
  142. package/.agent/workflows/brainstorm.md +110 -110
  143. package/.agent/workflows/changelog.md +112 -112
  144. package/.agent/workflows/create.md +124 -124
  145. package/.agent/workflows/debug.md +165 -189
  146. package/.agent/workflows/deploy.md +180 -189
  147. package/.agent/workflows/enhance.md +128 -151
  148. package/.agent/workflows/fix.md +114 -135
  149. package/.agent/workflows/generate.md +12 -4
  150. package/.agent/workflows/migrate.md +160 -160
  151. package/.agent/workflows/orchestrate.md +168 -168
  152. package/.agent/workflows/performance-benchmarker.md +114 -123
  153. package/.agent/workflows/plan.md +173 -173
  154. package/.agent/workflows/preview.md +80 -80
  155. package/.agent/workflows/refactor.md +161 -183
  156. package/.agent/workflows/review-ai.md +101 -129
  157. package/.agent/workflows/review.md +116 -116
  158. package/.agent/workflows/session.md +94 -94
  159. package/.agent/workflows/status.md +79 -79
  160. package/.agent/workflows/strengthen-skills.md +138 -139
  161. package/.agent/workflows/swarm.md +179 -179
  162. package/.agent/workflows/test.md +189 -211
  163. package/.agent/workflows/tribunal-backend.md +93 -113
  164. package/.agent/workflows/tribunal-database.md +94 -115
  165. package/.agent/workflows/tribunal-frontend.md +95 -118
  166. package/.agent/workflows/tribunal-full.md +92 -133
  167. package/.agent/workflows/tribunal-mobile.md +94 -119
  168. package/.agent/workflows/tribunal-performance.md +109 -133
  169. package/.agent/workflows/ui-ux-pro-max.md +122 -143
  170. package/package.json +1 -1
  171. package/.agent/skills/api-patterns/api-style.md +0 -42
  172. package/.agent/skills/api-patterns/auth.md +0 -24
  173. package/.agent/skills/api-patterns/documentation.md +0 -26
  174. package/.agent/skills/api-patterns/graphql.md +0 -41
  175. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  176. package/.agent/skills/api-patterns/response.md +0 -37
  177. package/.agent/skills/api-patterns/rest.md +0 -40
  178. package/.agent/skills/api-patterns/security-testing.md +0 -122
  179. package/.agent/skills/api-patterns/trpc.md +0 -41
  180. package/.agent/skills/api-patterns/versioning.md +0 -22
  181. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  182. package/.agent/skills/app-builder/feature-building.md +0 -53
  183. package/.agent/skills/app-builder/project-detection.md +0 -34
  184. package/.agent/skills/app-builder/scaffolding.md +0 -118
  185. package/.agent/skills/app-builder/tech-stack.md +0 -40
  186. package/.agent/skills/architecture/context-discovery.md +0 -43
  187. package/.agent/skills/architecture/examples.md +0 -94
  188. package/.agent/skills/architecture/pattern-selection.md +0 -68
  189. package/.agent/skills/architecture/patterns-reference.md +0 -50
  190. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  191. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  192. package/.agent/skills/database-design/database-selection.md +0 -43
  193. package/.agent/skills/database-design/indexing.md +0 -39
  194. package/.agent/skills/database-design/migrations.md +0 -48
  195. package/.agent/skills/database-design/optimization.md +0 -36
  196. package/.agent/skills/database-design/orm-selection.md +0 -30
  197. package/.agent/skills/database-design/schema-design.md +0 -56
  198. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  199. package/.agent/skills/frontend-design/color-system.md +0 -329
  200. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  201. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  202. package/.agent/skills/frontend-design/typography-system.md +0 -363
  203. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  204. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  205. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  206. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  207. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  208. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  209. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  210. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  211. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  212. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  213. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  214. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  215. package/.agent/skills/mobile-design/platform-android.md +0 -666
  216. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  217. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  218. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  219. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  220. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  221. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  222. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  223. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  224. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  225. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  226. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -1,154 +1,120 @@
1
- ---
2
- name: local-first
3
- description: Local-first software architecture mastery. CRDTs (Conflict-free Replicated Data Types), IndexedDB synchronization, sync engines (ElectricSQL, Replicache, PowerSync), offline-capable data fetching, optimistic UI, and SQLite in the browser (WASM). Use when building PWA offline capabilities, rapid UIs, or multiplayer collaborative tools.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 2.0.0
6
- last-updated: 2026-04-02
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
- ---
9
-
10
- # Local-First Architecture — Offline-capable Mastery
11
-
12
- > The network is the bottleneck. The database should live on the user's device.
13
- > Traditional SaaS is Cloud-First. The future of UX is Local-First.
14
-
15
- ---
16
-
17
- ## 1. Core Principles of Local-First
18
-
19
- In a Cloud-First app (REST/GraphQL), the UI waits for the server.
20
- In a Local-First app, the UI talks *only* to a local database. A background engine syncs that database to the cloud when online.
21
-
22
- 1. **Fast by default**: Zero network latency because reads/writes happen locally.
23
- 2. **Offline works flawlessly**: The app bounds to a local store (SQLite via WASM, IndexedDB).
24
- 3. **Multi-device Sync**: Conflict resolution is handled natively (usually via CRDTs or central conflict ledgers).
25
-
26
- ---
27
-
28
- ## 2. Sync Engines vs traditional fetching
29
-
30
- Do not use React Query / SWR to build local-first. They are HTTP caching mechanisms.
31
-
32
- ```typescript
33
- // CLOUD-FIRST (React Query / Fetch)
34
- // Fails when offline. Subject to UI latency.
35
- const { data, isLoading } = useQuery({
36
- queryKey: ['todos'],
37
- queryFn: () => fetch('/api/todos').then(res => res.json())
38
- })
39
-
40
- // ✅ LOCAL-FIRST (e.g. PowerSync / ElectricSQL / WatermelonDB)
41
- // Resolves instantly. Data lives locally. Syncs silently in background.
42
- import { useQuery } from '@powersync/react';
43
-
44
- const { data, isLoading } = useQuery('SELECT * FROM todos ORDER BY created_at DESC');
45
-
46
- // Writes are also local First
47
- const addTodo = async (text: string) => {
48
- // Written to the local SQLite WASM database instantly.
49
- await localDb.execute('INSERT INTO todos (id, text) VALUES (uuid(), ?)', [text]);
50
- // Background worker syncs to Postgres later.
51
- }
52
- ```
53
-
54
- ---
55
-
56
- ## 3. Conflict Resolution (CRDTs)
57
-
58
- When two users edit the exact same document offline and then reconnect, how is it resolved?
59
-
60
- **Conflict-free Replicated Data Types (CRDTs)** automatically merge data without requiring a central server to decide the "winner."
61
-
62
- ```typescript
63
- // Yjs - The leading CRDT library for collaborative text/state
64
- import * as Y from 'yjs'
65
- import { WebsocketProvider } from 'y-websocket'
66
-
67
- const ydoc = new Y.Doc()
68
- const provider = new WebsocketProvider('wss://sync.example.com', 'room-1', ydoc)
69
-
70
- // Shared state array
71
- const yarray = ydoc.getArray('todos')
72
-
73
- // Observe changes (Fires locally and when peers sync)
74
- yarray.observe(event => {
75
- console.log("State updated natively without conflict:", yarray.toArray())
76
- })
77
-
78
- // Insert data (Instantly merges cleanly with remote peers)
79
- yarray.insert(0, ['Buy milk'])
80
- ```
81
-
82
- ---
83
-
84
- ## 4. In-Browser Databases
85
-
86
- Storing megabytes of relational data in `localStorage` will crash the browser.
87
-
88
- | Technology | Use Case | Pros | Cons |
89
- |:---|:---|:---|:---|
90
- | **IndexedDB** | Key-Value | Native to browser | Hideous callback API, weak querying |
91
- | **Dexie.js** | Key-Value | Wraps IndexedDB with clean Promises | Not relational |
92
- | **SQLite WASM (OPFS)** | Relational | True SQL in browser | Setup complexity (Origin Private File System) |
93
- | **RxDB** | NoSQL Offline | Reactive UI out-of-the-box | Requires learning RxJS/Observables |
94
- | **WatermelonDB** | Relational | Built for React Native & Web | Requires native module setup on mobile |
95
-
96
- ```typescript
97
- // Clean IndexedDB Wrapper Example (Dexie)
98
- import Dexie, { type EntityTable } from 'dexie';
99
-
100
- interface Friend {
101
- id: number;
102
- name: string;
103
- age: number;
104
- }
105
-
106
- const db = new Dexie('FriendsDatabase') as Dexie & {
107
- friends: EntityTable<Friend, 'id'>;
108
- };
109
-
110
- // Schema configuration
111
- db.version(1).stores({
112
- friends: '++id, name, age' // Primary key and indexed props
113
- });
114
-
115
- // Write to DB instantly
116
- await db.friends.add({ name: 'Alice', age: 25 });
117
-
118
- // Live query natively drives React state without network calls
119
- import { useLiveQuery } from "dexie-react-hooks";
120
- const friends = useLiveQuery(() => db.friends.where('age').above(21).toArray());
121
- ```
122
-
123
- ---
124
-
125
- ## 🤖 LLM-Specific Traps (Local-First)
126
-
127
- 1. **`localStorage` Abuse:** Using `localStorage` as a database. It is synchronous, blocking the main UI thread, and limited to 5MB. Use IndexedDB/SQLite WASM.
128
- 2. **Re-inventing Conflict Logic:** Writing manual "last-write-wins" logic using timestamps (`updatedAt`). In distributed systems, clock drift guarantees this will fail and overwrite data corruptly. Use CRDTs (Yjs/Automerge).
129
- 3. **Optimistic UI as Local-First:** Thinking React Query's `onMutate` rollback logic is local-first architecture. It is not. It is a UX trick masking Cloud-First latency.
130
- 4. **Offline Auth Blindness:** Trying to execute local queries while wrapped in an `AuthGuard` that requires a server-side JWT verification on boot. Auth states must be cached locally to allow offline boots.
131
- 5. **Schema Migration Chaos:** Updating cloud schemas without providing local migration scripts. If the local client SQLite DB schema differs from the Postgres cloud schema, the sync engine will crash silently.
132
- 6. **Background Sync Blocking:** Writing custom `setInterval` sync loops on the main JavaScript thread, causing UI stutter. Sync logic must run in a Web Worker (or Service Worker).
133
- 7. **Ignoring IndexedDB Quotas:** Browsers will unpredictably evict IndexedDB data if the user's disk gets full. Architect apps resolving local data as a cache of the cloud, not as the irrevocable source of truth.
134
- 8. **Heavy Client Boot Times:** Bootstrapping a massive 50MB SQLite WASM database onto the client payload, destroying First Contentful Paint. WASM blobs should be pre-fetched/lazy-loaded.
135
- 9. **Eventual Consistency Panic:** Developing UIs that throw errors if a foreign key relation hasn't synced yet. Local-first UIs must defensively handle partial data relationships seamlessly.
136
- 10. **WebSocket vs Local Priority:** Over-relying on WebSockets connected directly to the server. The UI should strictly read from the Local DB; the Local DB gets updated by the WebSocket.
137
-
138
- ---
139
-
140
- ## 🏛️ Tribunal Integration
141
-
142
- ### ✅ Pre-Flight Self-Audit
143
- ```
144
- ✅ Is the UI strictly reading from a local DB instead of HTTP network calls?
145
- ✅ Are background sync tasks isolated in a Web Worker (or managed Sync Engine)?
146
- ✅ Is complex relational data stored in IndexedDB/SQLite (not `localStorage`)?
147
- ✅ Are conflicts resolved using CRDT structures rather than arbitrary timestamp comparisons?
148
- ✅ Have authentication states been cached locally to permit true offline app launches?
149
- ✅ Does the local database schema precisely mirror the required subset of the cloud database?
150
- ✅ Are writes executed locally first, instantly updating the UI?
151
- ✅ Have I utilized established Local-First sync engines (PowerSync, ElectricSQL, Yjs) instead of manual queuing?
152
- ✅ Is the UI built to degrade gracefully if sync relationships are temporarily shattered?
153
- ✅ Is the app's initial WASM/DB payload lazy-loaded to preserve fast initial page loads?
154
- ```
1
+ ---
2
+ name: local-first
3
+ description: Local-first software architecture mastery. CRDTs (Conflict-free Replicated Data Types), IndexedDB synchronization, sync engines (ElectricSQL, Replicache, PowerSync), offline-capable data fetching, optimistic UI, and SQLite in the browser (WASM). Use when building PWA offline capabilities, rapid UIs, or multiplayer collaborative tools.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 2.0.0
6
+ last-updated: 2026-04-02
7
+ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
+ ---
9
+
10
+ # Local-First Architecture — Offline-capable Mastery
11
+
12
+ ---
13
+
14
+ ## 1. Core Principles of Local-First
15
+
16
+ In a Cloud-First app (REST/GraphQL), the UI waits for the server.
17
+ In a Local-First app, the UI talks *only* to a local database. A background engine syncs that database to the cloud when online.
18
+
19
+ 1. **Fast by default**: Zero network latency because reads/writes happen locally.
20
+ 2. **Offline works flawlessly**: The app bounds to a local store (SQLite via WASM, IndexedDB).
21
+ 3. **Multi-device Sync**: Conflict resolution is handled natively (usually via CRDTs or central conflict ledgers).
22
+
23
+ ---
24
+
25
+ ## 2. Sync Engines vs traditional fetching
26
+
27
+ Do not use React Query / SWR to build local-first. They are HTTP caching mechanisms.
28
+
29
+ ```typescript
30
+ // CLOUD-FIRST (React Query / Fetch)
31
+ // Fails when offline. Subject to UI latency.
32
+ const { data, isLoading } = useQuery({
33
+ queryKey: ['todos'],
34
+ queryFn: () => fetch('/api/todos').then(res => res.json())
35
+ })
36
+
37
+ // ✅ LOCAL-FIRST (e.g. PowerSync / ElectricSQL / WatermelonDB)
38
+ // Resolves instantly. Data lives locally. Syncs silently in background.
39
+ import { useQuery } from '@powersync/react';
40
+
41
+ const { data, isLoading } = useQuery('SELECT * FROM todos ORDER BY created_at DESC');
42
+
43
+ // Writes are also local First
44
+ const addTodo = async (text: string) => {
45
+ // Written to the local SQLite WASM database instantly.
46
+ await localDb.execute('INSERT INTO todos (id, text) VALUES (uuid(), ?)', [text]);
47
+ // Background worker syncs to Postgres later.
48
+ }
49
+ ```
50
+
51
+ ---
52
+
53
+ ## 3. Conflict Resolution (CRDTs)
54
+
55
+ When two users edit the exact same document offline and then reconnect, how is it resolved?
56
+
57
+ **Conflict-free Replicated Data Types (CRDTs)** automatically merge data without requiring a central server to decide the "winner."
58
+
59
+ ```typescript
60
+ // Yjs - The leading CRDT library for collaborative text/state
61
+ import * as Y from 'yjs'
62
+ import { WebsocketProvider } from 'y-websocket'
63
+
64
+ const ydoc = new Y.Doc()
65
+ const provider = new WebsocketProvider('wss://sync.example.com', 'room-1', ydoc)
66
+
67
+ // Shared state array
68
+ const yarray = ydoc.getArray('todos')
69
+
70
+ // Observe changes (Fires locally and when peers sync)
71
+ yarray.observe(event => {
72
+ console.log("State updated natively without conflict:", yarray.toArray())
73
+ })
74
+
75
+ // Insert data (Instantly merges cleanly with remote peers)
76
+ yarray.insert(0, ['Buy milk'])
77
+ ```
78
+
79
+ ---
80
+
81
+ ## 4. In-Browser Databases
82
+
83
+ Storing megabytes of relational data in `localStorage` will crash the browser.
84
+
85
+ |Technology|Use Case|Pros|Cons|
86
+ |:---|:---|:---|:---|
87
+ |**IndexedDB**|Key-Value|Native to browser|Hideous callback API, weak querying|
88
+ |**Dexie.js**|Key-Value|Wraps IndexedDB with clean Promises|Not relational|
89
+ |**SQLite WASM (OPFS)**|Relational|True SQL in browser|Setup complexity (Origin Private File System)|
90
+ |**RxDB**|NoSQL Offline|Reactive UI out-of-the-box|Requires learning RxJS/Observables|
91
+ |**WatermelonDB**|Relational|Built for React Native & Web|Requires native module setup on mobile|
92
+
93
+ ```typescript
94
+ // Clean IndexedDB Wrapper Example (Dexie)
95
+ import Dexie, { type EntityTable } from 'dexie';
96
+
97
+ interface Friend {
98
+ id: number;
99
+ name: string;
100
+ age: number;
101
+ }
102
+
103
+ const db = new Dexie('FriendsDatabase') as Dexie & {
104
+ friends: EntityTable<Friend, 'id'>;
105
+ };
106
+
107
+ // Schema configuration
108
+ db.version(1).stores({
109
+ friends: '++id, name, age' // Primary key and indexed props
110
+ });
111
+
112
+ // Write to DB instantly
113
+ await db.friends.add({ name: 'Alice', age: 25 });
114
+
115
+ // Live query natively drives React state without network calls
116
+ import { useLiveQuery } from "dexie-react-hooks";
117
+ const friends = useLiveQuery(() => db.friends.where('age').above(21).toArray());
118
+ ```
119
+
120
+ ---
@@ -1,118 +1,84 @@
1
- ---
2
- name: mcp-builder
3
- description: Model Context Protocol (MCP) server integration mastery. Building custom MCP servers, standardizing tool exposes, managing standardized communication between large language models and localized datasets, securing boundary contexts, and architecting resource schemas. Use when modifying, extending, or building custom toolsets for AI platforms relying on the MCP standard.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 2.0.0
6
- last-updated: 2026-04-02
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
- ---
9
-
10
- # MCP Builder — Context Protocol Mastery
11
-
12
- > AI reasoning is infinite. But its access to your localized reality is zero without a bridge.
13
- > An MCP Server is the high-bandwidth, strictly-schema'd bridge into your secure internal domain.
14
-
15
- ---
16
-
17
- ## 1. The Anatomy of an MCP Server
18
-
19
- The Model Context Protocol (MCP) standardizes how AI agents fetch local data and execute tools.
20
- A robust MCP server exposes exactly 3 primary concepts:
21
- 1. **Resources:** Read-only data payloads (Logs, local files, database dumps).
22
- 2. **Prompts:** Reusable injected context scaffolding (e.g., "Summarize this log with strict parameters").
23
- 3. **Tools:** Actionable executed capabilities (e.g., "Run Postgres Query", "Restart Server").
24
-
25
- ```typescript
26
- // Standardize exposing a Tool securely via an MCP Server Wrapper
27
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
28
- import { z } from "zod";
29
-
30
- const server = new McpServer({
31
- name: "internal-database-auditor",
32
- version: "1.0.0",
33
- });
34
-
35
- // Defining a rigorous tool parameter boundary
36
- server.tool(
37
- "query_production_database",
38
- "Executes a read-only sanitized query against the production analytical replica.",
39
- {
40
- table: z.enum(["users", "transactions", "audit_logs"]).describe("The specific table to analyze"),
41
- limit: z.number().max(100).default(10).describe("Maximum row returns to prevent context bloat"),
42
- },
43
- async ({ table, limit }) => {
44
- // Execution logic
45
- const data = await secureDatabaseClient.query(`SELECT * FROM ${table} LIMIT ${limit}`);
46
- return {
47
- content: [{ type: "text", text: JSON.stringify(data) }]
48
- };
49
- }
50
- );
51
- ```
52
-
53
- ---
54
-
55
- ## 2. Resource Management vs Tool Management
56
-
57
- Do not use a `Tool` to read static data. Do not use a `Resource` to invoke remote actions.
58
-
59
- - **Resources (URI based):** Act identically to local files. Exposed explicitly so the AI context manager can read them *before* invoking tools. Use for things like `file:///app/config.json` or `db://schema/users`.
60
- - **Tools:** Use exclusively when parameterized execution is required dynamically. Tools MUST be accompanied by extremely literal, explicit descriptions, because the LLM uses the description text to map Intent to the Tool execution.
61
-
62
- ---
63
-
64
- ## 3. Structuring Tool Descriptions (The LLM Gateway)
65
-
66
- The LLM decides to fire your tool based entirely on the Description schema.
67
- If your description is vague, the LLM will hallucinate executions unpredictably.
68
-
69
- ```typescript
70
- // VAGUE (The LLM will guess when to use this, often incorrectly)
71
- description: "Changes the system status."
72
-
73
- // ✅ DETERMINISTIC (The LLM knows the exact boundaries and consequences)
74
- description: "Transitions the payment processing gateway between 'ACTIVE' and 'MAINTENANCE' modes. Use this ONLY after verifying traffic logs to halt impending queue flooding. Requires Admin clearance."
75
- ```
76
-
77
- ---
78
-
79
- ## 4. MCP Security Boundaries
80
-
81
- An MCP Server gives an external AI execution capability over your shell or database.
82
-
83
- - **Never Expose Raw Shells Natively:** Unless deliberately building a high-trust local desktop agent. Expose mapped commands (`execute_npm_build`) instead of raw terminals (`bash_command`).
84
- - **Enforce Read-Only Defaults:** If creating a database tool, create `query_select_only` separate from `execute_mutation`. Give the AI read-only access.
85
- - **Context Size Truncation:** If a tool queries a 5GB text log, the AI context window will instantly overflow and crash the session. The MCP logic MUST forcibly truncate outputs before returning.
86
-
87
- ---
88
-
89
- ## 🤖 LLM-Specific Traps (MCP Integration)
90
-
91
- 1. **Raw Terminal Chaos:** Exposing a `run_command` MCP tool that blindly executes strings into `child_process.exec()` without any input sanitization, opening massive RCE (Remote Code Execution) vulnerabilities via prompt injection.
92
- 2. **Missing Input Schemas:** The AI defines a tool but accepts an `any` type object as the argument. The LLM will wildly hallucinate keys into the object. You MUST enforce strict Zod boundaries on every incoming payload.
93
- 3. **Massive Output Strings:** A tool returns 200,000 characters of a database dump without pagination or truncation limits, immediately blowing out the 128k context window and terminating the user session silently.
94
- 4. **Action Overlap:** Creating 5 separate tools (`read_file`, `scan_file`, `parse_file`) with nearly identical generic descriptions. The LLM will randomly select between them, destroying deterministic reliability. Consolidate overlapping tool definitions.
95
- 5. **No State Feedback:** A tool mutates user state successfully, but returns an empty string `""` to the LLM. The LLM gets confused and assumes the tool failed, trying to execute it again. Tools must return explicit confirmation states (`"Success: Mutated 5 rows."`).
96
- 6. **Resource Pretending as a Tool:** Building a complex function to "Fetch API Keys config" instead of just exposing the configuration natively as an MCP Resource URI.
97
- 7. **Ignoring Transport Layers:** Assuming standard HTTP routing for MCP implementations instead of using standard STDIO or SSE (Server-Sent Events) transports required by the specific AI host architectures.
98
- 8. **Catch-And-Hide Errors:** Formatting error messages back into the tool response as standard `text`. If an MCP tool errors, it must set `isError: true` so the LLM explicitly recognizes the failure and recalculates.
99
- 9. **Infinite Retry Traps:** The LLM fires a tool wrong, gets an error, and fires it wrong again infinitely. The MCP builder MUST return guided error messages (e.g., "Error: Invalid ID. Valid IDs are 1,2,3") to break the hallucination loop.
100
- 10. **The Universal Fixer Tool:** Defining a massive monolithic `executeTask(prompt)` tool instead of segregating capabilities cleanly into specific atomic tools (`git_commit`, `write_file`, `read_log`).
101
-
102
- ---
103
-
104
- ## 🏛️ Tribunal Integration
105
-
106
- ### ✅ Pre-Flight Self-Audit
107
- ```
108
- ✅ Are MCP tools rigidly bounded by strict `.describe()` schemas (Zod or JSON Schema)?
109
- ✅ Has the output payload been aggressively truncated to prevent LLM context-window exhaustion?
110
- ✅ Do the tool operational descriptions explicitly define the exact intent boundaries?
111
- ✅ Are execution errors returned with explicit `isError: true` flags directly to the LLM agent?
112
- ✅ Do error strings contain corrective guidance allowing the LLM to self-correct and retry?
113
- ✅ Has raw RCE shell access been minimized or heavily parameterized to specific execution actions?
114
- ✅ Were static files mapped distinctly as MCP *Resources* rather than invoked as executable *Tools*?
115
- ✅ Does every tool execution return an explicit, verbose success/mutation confirmation string?
116
- ✅ Have duplicated intersecting tool concepts been consolidated to prevent LLM routing confusion?
117
- ✅ Did I select the correct transport mechanism (STDIO vs SSE) required by the host client configuration?
118
- ```
1
+ ---
2
+ name: mcp-builder
3
+ description: Model Context Protocol (MCP) server integration mastery. Building custom MCP servers, standardizing tool exposes, managing standardized communication between large language models and localized datasets, securing boundary contexts, and architecting resource schemas. Use when modifying, extending, or building custom toolsets for AI platforms relying on the MCP standard.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 2.0.0
6
+ last-updated: 2026-04-02
7
+ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
+ ---
9
+
10
+ # MCP Builder — Context Protocol Mastery
11
+
12
+ ---
13
+
14
+ ## 1. The Anatomy of an MCP Server
15
+
16
+ The Model Context Protocol (MCP) standardizes how AI agents fetch local data and execute tools.
17
+ A robust MCP server exposes exactly 3 primary concepts:
18
+ 1. **Resources:** Read-only data payloads (Logs, local files, database dumps).
19
+ 2. **Prompts:** Reusable injected context scaffolding (e.g., "Summarize this log with strict parameters").
20
+ 3. **Tools:** Actionable executed capabilities (e.g., "Run Postgres Query", "Restart Server").
21
+
22
+ ```typescript
23
+ // Standardize exposing a Tool securely via an MCP Server Wrapper
24
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
25
+ import { z } from "zod";
26
+
27
+ const server = new McpServer({
28
+ name: "internal-database-auditor",
29
+ version: "1.0.0",
30
+ });
31
+
32
+ // Defining a rigorous tool parameter boundary
33
+ server.tool(
34
+ "query_production_database",
35
+ "Executes a read-only sanitized query against the production analytical replica.",
36
+ {
37
+ table: z.enum(["users", "transactions", "audit_logs"]).describe("The specific table to analyze"),
38
+ limit: z.number().max(100).default(10).describe("Maximum row returns to prevent context bloat"),
39
+ },
40
+ async ({ table, limit }) => {
41
+ // Execution logic
42
+ const data = await secureDatabaseClient.query(`SELECT * FROM ${table} LIMIT ${limit}`);
43
+ return {
44
+ content: [{ type: "text", text: JSON.stringify(data) }]
45
+ };
46
+ }
47
+ );
48
+ ```
49
+
50
+ ---
51
+
52
+ ## 2. Resource Management vs Tool Management
53
+
54
+ Do not use a `Tool` to read static data. Do not use a `Resource` to invoke remote actions.
55
+
56
+ - **Resources (URI based):** Act identically to local files. Exposed explicitly so the AI context manager can read them *before* invoking tools. Use for things like `file:///app/config.json` or `db://schema/users`.
57
+ - **Tools:** Use exclusively when parameterized execution is required dynamically. Tools MUST be accompanied by extremely literal, explicit descriptions, because the LLM uses the description text to map Intent to the Tool execution.
58
+
59
+ ---
60
+
61
+ ## 3. Structuring Tool Descriptions (The LLM Gateway)
62
+
63
+ The LLM decides to fire your tool based entirely on the Description schema.
64
+ If your description is vague, the LLM will hallucinate executions unpredictably.
65
+
66
+ ```typescript
67
+ // VAGUE (The LLM will guess when to use this, often incorrectly)
68
+ description: "Changes the system status."
69
+
70
+ // DETERMINISTIC (The LLM knows the exact boundaries and consequences)
71
+ description: "Transitions the payment processing gateway between 'ACTIVE' and 'MAINTENANCE' modes. Use this ONLY after verifying traffic logs to halt impending queue flooding. Requires Admin clearance."
72
+ ```
73
+
74
+ ---
75
+
76
+ ## 4. MCP Security Boundaries
77
+
78
+ An MCP Server gives an external AI execution capability over your shell or database.
79
+
80
+ - **Never Expose Raw Shells Natively:** Unless deliberately building a high-trust local desktop agent. Expose mapped commands (`execute_npm_build`) instead of raw terminals (`bash_command`).
81
+ - **Enforce Read-Only Defaults:** If creating a database tool, create `query_select_only` separate from `execute_mutation`. Give the AI read-only access.
82
+ - **Context Size Truncation:** If a tool queries a 5GB text log, the AI context window will instantly overflow and crash the session. The MCP logic MUST forcibly truncate outputs before returning.
83
+
84
+ ---