tribunal-kit 3.0.0 → 4.0.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 (233) 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/precedence-reviewer.md +213 -0
  24. package/.agent/agents/product-manager.md +142 -162
  25. package/.agent/agents/product-owner.md +6 -25
  26. package/.agent/agents/project-planner.md +142 -162
  27. package/.agent/agents/qa-automation-engineer.md +225 -242
  28. package/.agent/agents/security-auditor.md +174 -194
  29. package/.agent/agents/seo-specialist.md +193 -213
  30. package/.agent/agents/sql-reviewer.md +161 -194
  31. package/.agent/agents/supervisor-agent.md +184 -203
  32. package/.agent/agents/swarm-worker-contracts.md +17 -17
  33. package/.agent/agents/swarm-worker-registry.md +46 -46
  34. package/.agent/agents/test-coverage-reviewer.md +160 -193
  35. package/.agent/agents/test-engineer.md +0 -21
  36. package/.agent/agents/type-safety-reviewer.md +175 -208
  37. package/.agent/patterns/generator.md +9 -9
  38. package/.agent/patterns/inversion.md +12 -12
  39. package/.agent/patterns/pipeline.md +9 -9
  40. package/.agent/patterns/reviewer.md +13 -13
  41. package/.agent/patterns/tool-wrapper.md +9 -9
  42. package/.agent/rules/GEMINI.md +63 -63
  43. package/.agent/scripts/append_flow.js +72 -0
  44. package/.agent/scripts/case_law_manager.py +525 -0
  45. package/.agent/scripts/compress_skills.py +167 -0
  46. package/.agent/scripts/consolidate_skills.py +173 -0
  47. package/.agent/scripts/deep_compress.py +202 -0
  48. package/.agent/scripts/minify_context.py +80 -0
  49. package/.agent/scripts/security_scan.py +1 -1
  50. package/.agent/scripts/skill_evolution.py +563 -0
  51. package/.agent/scripts/strip_tribunal.py +41 -0
  52. package/.agent/skills/agent-organizer/SKILL.md +100 -126
  53. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  54. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +134 -160
  55. package/.agent/skills/api-patterns/SKILL.md +123 -215
  56. package/.agent/skills/api-security-auditor/SKILL.md +143 -177
  57. package/.agent/skills/app-builder/SKILL.md +334 -50
  58. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  59. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  60. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  61. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  62. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  63. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  64. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  65. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  66. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  67. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  68. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  69. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  70. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  71. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  72. package/.agent/skills/appflow-wireframe/SKILL.md +95 -121
  73. package/.agent/skills/architecture/SKILL.md +169 -331
  74. package/.agent/skills/authentication-best-practices/SKILL.md +139 -173
  75. package/.agent/skills/bash-linux/SKILL.md +129 -154
  76. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  77. package/.agent/skills/brainstorming/SKILL.md +436 -104
  78. package/.agent/skills/building-native-ui/SKILL.md +152 -174
  79. package/.agent/skills/clean-code/SKILL.md +331 -360
  80. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  81. package/.agent/skills/config-validator/SKILL.md +115 -141
  82. package/.agent/skills/csharp-developer/SKILL.md +468 -528
  83. package/.agent/skills/database-design/SKILL.md +104 -369
  84. package/.agent/skills/deployment-procedures/SKILL.md +119 -145
  85. package/.agent/skills/devops-engineer/SKILL.md +295 -332
  86. package/.agent/skills/devops-incident-responder/SKILL.md +87 -113
  87. package/.agent/skills/doc.md +5 -5
  88. package/.agent/skills/documentation-templates/SKILL.md +27 -63
  89. package/.agent/skills/edge-computing/SKILL.md +131 -157
  90. package/.agent/skills/extract-design-system/SKILL.md +108 -134
  91. package/.agent/skills/framer-motion-expert/SKILL.md +111 -855
  92. package/.agent/skills/frontend-design/SKILL.md +151 -499
  93. package/.agent/skills/game-design-expert/SKILL.md +79 -105
  94. package/.agent/skills/game-engineering-expert/SKILL.md +96 -122
  95. package/.agent/skills/geo-fundamentals/SKILL.md +97 -124
  96. package/.agent/skills/github-operations/SKILL.md +279 -314
  97. package/.agent/skills/gsap-expert/SKILL.md +119 -826
  98. package/.agent/skills/i18n-localization/SKILL.md +113 -138
  99. package/.agent/skills/intelligent-routing/SKILL.md +167 -127
  100. package/.agent/skills/lint-and-validate/SKILL.md +16 -52
  101. package/.agent/skills/llm-engineering/SKILL.md +344 -357
  102. package/.agent/skills/local-first/SKILL.md +128 -154
  103. package/.agent/skills/mcp-builder/SKILL.md +92 -118
  104. package/.agent/skills/mobile-design/SKILL.md +213 -219
  105. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  106. package/.agent/skills/nextjs-react-expert/SKILL.md +99 -698
  107. package/.agent/skills/nodejs-best-practices/SKILL.md +498 -559
  108. package/.agent/skills/observability/SKILL.md +293 -330
  109. package/.agent/skills/parallel-agents/SKILL.md +96 -122
  110. package/.agent/skills/performance-profiling/SKILL.md +217 -254
  111. package/.agent/skills/plan-writing/SKILL.md +92 -118
  112. package/.agent/skills/platform-engineer/SKILL.md +97 -123
  113. package/.agent/skills/playwright-best-practices/SKILL.md +137 -162
  114. package/.agent/skills/powershell-windows/SKILL.md +112 -146
  115. package/.agent/skills/project-idioms/SKILL.md +87 -0
  116. package/.agent/skills/python-patterns/SKILL.md +15 -35
  117. package/.agent/skills/python-pro/SKILL.md +148 -754
  118. package/.agent/skills/react-specialist/SKILL.md +123 -827
  119. package/.agent/skills/readme-builder/SKILL.md +23 -85
  120. package/.agent/skills/realtime-patterns/SKILL.md +269 -304
  121. package/.agent/skills/red-team-tactics/SKILL.md +18 -51
  122. package/.agent/skills/rust-pro/SKILL.md +623 -701
  123. package/.agent/skills/seo-fundamentals/SKILL.md +129 -154
  124. package/.agent/skills/server-management/SKILL.md +164 -190
  125. package/.agent/skills/shadcn-ui-expert/SKILL.md +181 -206
  126. package/.agent/skills/skill-creator/SKILL.md +24 -56
  127. package/.agent/skills/sql-pro/SKILL.md +579 -633
  128. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +35 -66
  129. package/.agent/skills/swiftui-expert/SKILL.md +151 -176
  130. package/.agent/skills/systematic-debugging/SKILL.md +92 -118
  131. package/.agent/skills/tailwind-patterns/SKILL.md +516 -576
  132. package/.agent/skills/tdd-workflow/SKILL.md +111 -137
  133. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  134. package/.agent/skills/testing-patterns/SKILL.md +512 -573
  135. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  136. package/.agent/skills/ui-ux-pro-max/SKILL.md +8 -41
  137. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  138. package/.agent/skills/vue-expert/SKILL.md +127 -866
  139. package/.agent/skills/vulnerability-scanner/SKILL.md +354 -269
  140. package/.agent/skills/web-accessibility-auditor/SKILL.md +168 -193
  141. package/.agent/skills/web-design-guidelines/SKILL.md +25 -61
  142. package/.agent/skills/webapp-testing/SKILL.md +119 -145
  143. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  144. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  145. package/.agent/workflows/api-tester.md +151 -151
  146. package/.agent/workflows/audit.md +127 -138
  147. package/.agent/workflows/brainstorm.md +110 -110
  148. package/.agent/workflows/changelog.md +112 -112
  149. package/.agent/workflows/create.md +124 -124
  150. package/.agent/workflows/debug.md +165 -189
  151. package/.agent/workflows/deploy.md +180 -189
  152. package/.agent/workflows/enhance.md +128 -151
  153. package/.agent/workflows/fix.md +114 -135
  154. package/.agent/workflows/generate.md +13 -4
  155. package/.agent/workflows/migrate.md +160 -160
  156. package/.agent/workflows/orchestrate.md +168 -168
  157. package/.agent/workflows/performance-benchmarker.md +114 -123
  158. package/.agent/workflows/plan.md +173 -173
  159. package/.agent/workflows/preview.md +80 -80
  160. package/.agent/workflows/refactor.md +161 -183
  161. package/.agent/workflows/review-ai.md +101 -129
  162. package/.agent/workflows/review.md +116 -116
  163. package/.agent/workflows/session.md +94 -94
  164. package/.agent/workflows/status.md +79 -79
  165. package/.agent/workflows/strengthen-skills.md +138 -139
  166. package/.agent/workflows/swarm.md +179 -179
  167. package/.agent/workflows/test.md +189 -211
  168. package/.agent/workflows/tribunal-backend.md +94 -113
  169. package/.agent/workflows/tribunal-database.md +95 -115
  170. package/.agent/workflows/tribunal-frontend.md +96 -118
  171. package/.agent/workflows/tribunal-full.md +93 -133
  172. package/.agent/workflows/tribunal-mobile.md +95 -119
  173. package/.agent/workflows/tribunal-performance.md +110 -133
  174. package/.agent/workflows/ui-ux-pro-max.md +122 -143
  175. package/README.md +30 -1
  176. package/bin/tribunal-kit.js +175 -12
  177. package/package.json +25 -4
  178. package/.agent/skills/api-patterns/api-style.md +0 -42
  179. package/.agent/skills/api-patterns/auth.md +0 -24
  180. package/.agent/skills/api-patterns/documentation.md +0 -26
  181. package/.agent/skills/api-patterns/graphql.md +0 -41
  182. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  183. package/.agent/skills/api-patterns/response.md +0 -37
  184. package/.agent/skills/api-patterns/rest.md +0 -40
  185. package/.agent/skills/api-patterns/security-testing.md +0 -122
  186. package/.agent/skills/api-patterns/trpc.md +0 -41
  187. package/.agent/skills/api-patterns/versioning.md +0 -22
  188. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  189. package/.agent/skills/app-builder/feature-building.md +0 -53
  190. package/.agent/skills/app-builder/project-detection.md +0 -34
  191. package/.agent/skills/app-builder/scaffolding.md +0 -118
  192. package/.agent/skills/app-builder/tech-stack.md +0 -40
  193. package/.agent/skills/architecture/context-discovery.md +0 -43
  194. package/.agent/skills/architecture/examples.md +0 -94
  195. package/.agent/skills/architecture/pattern-selection.md +0 -68
  196. package/.agent/skills/architecture/patterns-reference.md +0 -50
  197. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  198. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  199. package/.agent/skills/database-design/database-selection.md +0 -43
  200. package/.agent/skills/database-design/indexing.md +0 -39
  201. package/.agent/skills/database-design/migrations.md +0 -48
  202. package/.agent/skills/database-design/optimization.md +0 -36
  203. package/.agent/skills/database-design/orm-selection.md +0 -30
  204. package/.agent/skills/database-design/schema-design.md +0 -56
  205. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  206. package/.agent/skills/frontend-design/color-system.md +0 -329
  207. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  208. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  209. package/.agent/skills/frontend-design/typography-system.md +0 -363
  210. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  211. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  212. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  213. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  214. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  215. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  216. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  217. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  218. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  219. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  220. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  221. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  222. package/.agent/skills/mobile-design/platform-android.md +0 -666
  223. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  224. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  225. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  226. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  227. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  228. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  229. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  230. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  231. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  232. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  233. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -1,154 +1,128 @@
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
+ ## Hallucination Traps (Read First)
11
+ - ❌ Assuming server data is always newer than local data -> ✅ Conflicts are inevitable; design merge strategy (LWW, CRDTs) before writing code
12
+ - Using localStorage for anything beyond 5MB -> Use IndexedDB (via Dexie or idb) for structured local storage; localStorage is synchronous and tiny
13
+ - Syncing entire datasets on every connection -> Use incremental sync with watermarks/timestamps to minimize bandwidth
14
+
15
+ ---
16
+
17
+
18
+ # Local-First Architecture — Offline-capable Mastery
19
+
20
+ ---
21
+
22
+ ## 1. Core Principles of Local-First
23
+
24
+ In a Cloud-First app (REST/GraphQL), the UI waits for the server.
25
+ In a Local-First app, the UI talks *only* to a local database. A background engine syncs that database to the cloud when online.
26
+
27
+ 1. **Fast by default**: Zero network latency because reads/writes happen locally.
28
+ 2. **Offline works flawlessly**: The app bounds to a local store (SQLite via WASM, IndexedDB).
29
+ 3. **Multi-device Sync**: Conflict resolution is handled natively (usually via CRDTs or central conflict ledgers).
30
+
31
+ ---
32
+
33
+ ## 2. Sync Engines vs traditional fetching
34
+
35
+ Do not use React Query / SWR to build local-first. They are HTTP caching mechanisms.
36
+
37
+ ```typescript
38
+ // ❌ CLOUD-FIRST (React Query / Fetch)
39
+ // Fails when offline. Subject to UI latency.
40
+ const { data, isLoading } = useQuery({
41
+ queryKey: ['todos'],
42
+ queryFn: () => fetch('/api/todos').then(res => res.json())
43
+ })
44
+
45
+ // ✅ LOCAL-FIRST (e.g. PowerSync / ElectricSQL / WatermelonDB)
46
+ // Resolves instantly. Data lives locally. Syncs silently in background.
47
+ import { useQuery } from '@powersync/react';
48
+
49
+ const { data, isLoading } = useQuery('SELECT * FROM todos ORDER BY created_at DESC');
50
+
51
+ // Writes are also local First
52
+ const addTodo = async (text: string) => {
53
+ // Written to the local SQLite WASM database instantly.
54
+ await localDb.execute('INSERT INTO todos (id, text) VALUES (uuid(), ?)', [text]);
55
+ // Background worker syncs to Postgres later.
56
+ }
57
+ ```
58
+
59
+ ---
60
+
61
+ ## 3. Conflict Resolution (CRDTs)
62
+
63
+ When two users edit the exact same document offline and then reconnect, how is it resolved?
64
+
65
+ **Conflict-free Replicated Data Types (CRDTs)** automatically merge data without requiring a central server to decide the "winner."
66
+
67
+ ```typescript
68
+ // Yjs - The leading CRDT library for collaborative text/state
69
+ import * as Y from 'yjs'
70
+ import { WebsocketProvider } from 'y-websocket'
71
+
72
+ const ydoc = new Y.Doc()
73
+ const provider = new WebsocketProvider('wss://sync.example.com', 'room-1', ydoc)
74
+
75
+ // Shared state array
76
+ const yarray = ydoc.getArray('todos')
77
+
78
+ // Observe changes (Fires locally and when peers sync)
79
+ yarray.observe(event => {
80
+ console.log("State updated natively without conflict:", yarray.toArray())
81
+ })
82
+
83
+ // Insert data (Instantly merges cleanly with remote peers)
84
+ yarray.insert(0, ['Buy milk'])
85
+ ```
86
+
87
+ ---
88
+
89
+ ## 4. In-Browser Databases
90
+
91
+ Storing megabytes of relational data in `localStorage` will crash the browser.
92
+
93
+ |Technology|Use Case|Pros|Cons|
94
+ |:---|:---|:---|:---|
95
+ |**IndexedDB**|Key-Value|Native to browser|Hideous callback API, weak querying|
96
+ |**Dexie.js**|Key-Value|Wraps IndexedDB with clean Promises|Not relational|
97
+ |**SQLite WASM (OPFS)**|Relational|True SQL in browser|Setup complexity (Origin Private File System)|
98
+ |**RxDB**|NoSQL Offline|Reactive UI out-of-the-box|Requires learning RxJS/Observables|
99
+ |**WatermelonDB**|Relational|Built for React Native & Web|Requires native module setup on mobile|
100
+
101
+ ```typescript
102
+ // Clean IndexedDB Wrapper Example (Dexie)
103
+ import Dexie, { type EntityTable } from 'dexie';
104
+
105
+ interface Friend {
106
+ id: number;
107
+ name: string;
108
+ age: number;
109
+ }
110
+
111
+ const db = new Dexie('FriendsDatabase') as Dexie & {
112
+ friends: EntityTable<Friend, 'id'>;
113
+ };
114
+
115
+ // Schema configuration
116
+ db.version(1).stores({
117
+ friends: '++id, name, age' // Primary key and indexed props
118
+ });
119
+
120
+ // Write to DB instantly
121
+ await db.friends.add({ name: 'Alice', age: 25 });
122
+
123
+ // Live query natively drives React state without network calls
124
+ import { useLiveQuery } from "dexie-react-hooks";
125
+ const friends = useLiveQuery(() => db.friends.where('age').above(21).toArray());
126
+ ```
127
+
128
+ ---
@@ -1,118 +1,92 @@
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
+ ## Hallucination Traps (Read First)
11
+ - ❌ Exposing tools without input validation schemas -> ✅ Every MCP tool MUST have JSON Schema for parameters; the protocol requires it
12
+ - Returning unstructured strings from tool calls -> Return structured JSON that the LLM can reliably parse and act on
13
+ - Not handling tool call timeouts -> Always set execution timeouts; hanging tools block the entire LLM conversation loop
14
+
15
+ ---
16
+
17
+
18
+ # MCP Builder — Context Protocol Mastery
19
+
20
+ ---
21
+
22
+ ## 1. The Anatomy of an MCP Server
23
+
24
+ The Model Context Protocol (MCP) standardizes how AI agents fetch local data and execute tools.
25
+ A robust MCP server exposes exactly 3 primary concepts:
26
+ 1. **Resources:** Read-only data payloads (Logs, local files, database dumps).
27
+ 2. **Prompts:** Reusable injected context scaffolding (e.g., "Summarize this log with strict parameters").
28
+ 3. **Tools:** Actionable executed capabilities (e.g., "Run Postgres Query", "Restart Server").
29
+
30
+ ```typescript
31
+ // Standardize exposing a Tool securely via an MCP Server Wrapper
32
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
33
+ import { z } from "zod";
34
+
35
+ const server = new McpServer({
36
+ name: "internal-database-auditor",
37
+ version: "1.0.0",
38
+ });
39
+
40
+ // Defining a rigorous tool parameter boundary
41
+ server.tool(
42
+ "query_production_database",
43
+ "Executes a read-only sanitized query against the production analytical replica.",
44
+ {
45
+ table: z.enum(["users", "transactions", "audit_logs"]).describe("The specific table to analyze"),
46
+ limit: z.number().max(100).default(10).describe("Maximum row returns to prevent context bloat"),
47
+ },
48
+ async ({ table, limit }) => {
49
+ // Execution logic
50
+ const data = await secureDatabaseClient.query(`SELECT * FROM ${table} LIMIT ${limit}`);
51
+ return {
52
+ content: [{ type: "text", text: JSON.stringify(data) }]
53
+ };
54
+ }
55
+ );
56
+ ```
57
+
58
+ ---
59
+
60
+ ## 2. Resource Management vs Tool Management
61
+
62
+ Do not use a `Tool` to read static data. Do not use a `Resource` to invoke remote actions.
63
+
64
+ - **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`.
65
+ - **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.
66
+
67
+ ---
68
+
69
+ ## 3. Structuring Tool Descriptions (The LLM Gateway)
70
+
71
+ The LLM decides to fire your tool based entirely on the Description schema.
72
+ If your description is vague, the LLM will hallucinate executions unpredictably.
73
+
74
+ ```typescript
75
+ // ❌ VAGUE (The LLM will guess when to use this, often incorrectly)
76
+ description: "Changes the system status."
77
+
78
+ // ✅ DETERMINISTIC (The LLM knows the exact boundaries and consequences)
79
+ 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."
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 4. MCP Security Boundaries
85
+
86
+ An MCP Server gives an external AI execution capability over your shell or database.
87
+
88
+ - **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`).
89
+ - **Enforce Read-Only Defaults:** If creating a database tool, create `query_select_only` separate from `execute_mutation`. Give the AI read-only access.
90
+ - **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.
91
+
92
+ ---