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,173 +1,139 @@
1
- ---
2
- name: authentication-best-practices
3
- description: Authentication and Authorization mastery. Best practices for OAuth2, OpenID Connect, JWT (JSON Web Tokens), session management, password hashing, MFA (Multi-Factor Authentication), RBAC/ABAC, SSO, and secure credential storage. Use when auditing or implementing login flows, identity systems, or access control.
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
- # Authentication & Authorization — Identity Mastery
11
-
12
- > Identity is the perimeter. If authentication is flawed, the entire system is breached.
13
- > Never roll your own crypto. Never store plaintext passwords. Secure tokens are not optional.
14
-
15
- ---
16
-
17
- ## Passwords & Hashing
18
-
19
- ```typescript
20
- // BAD: md5, sha1, sha256 (too fast, vulnerable to brute force/rainbow tables)
21
- const hash = crypto.createHash('sha256').update(password).digest('hex');
22
-
23
- // GOOD: Argon2 (memory-hard, ASIC resistant) or bcrypt
24
- import * as argon2 from "argon2";
25
-
26
- async function hashPassword(password: string): Promise<string> {
27
- // Argon2 hashes include the salt inherently in the resulting string
28
- return await argon2.hash(password, {
29
- type: argon2.argon2id, // recommended variant
30
- memoryCost: 2 ** 16, // 64 MB
31
- timeCost: 3, // iterations
32
- parallelism: 1, // threads
33
- });
34
- }
35
-
36
- async function verifyPassword(hash: string, password: string): Promise<boolean> {
37
- return await argon2.verify(hash, password);
38
- }
39
- ```
40
-
41
- ### Password Policies
42
- - **Length over complexity**: Require minimum 12 characters. Stop requiring arbitrary symbols (e.g., `!@#`).
43
- - **Check against breaches**: Use HaveIBeenPwned API or similar to reject compromised passwords during signup.
44
- - **Never expire passwords arbitrarily**: Only force resets if there is evidence of a breach.
45
-
46
- ---
47
-
48
- ## Session Management vs. JWT
49
-
50
- ### 1. Stateful Sessions (Cookies)
51
- **Best for**: Monolithic web apps, SSR apps (Next.js, Remix).
52
- - Server stores session ID mapped to user data in Redis/DB.
53
- - Client stores session ID in an `HttpOnly`, `Secure`, `SameSite=Lax/Strict` cookie.
54
- - **Pros**: Immediate revocation, server-side truth, invisible to XSS.
55
- - **Cons**: Requires DB lookup per request.
56
-
57
- ### 2. Stateless JWT (JSON Web Tokens)
58
- **Best for**: Distributed APIs, Microservices, Native mobile apps.
59
- - Server signs a token containing user claims.
60
- - Client passes it in `Authorization: Bearer <token>` header.
61
- - **Pros**: No DB lookup needed, easy cross-origin sharing.
62
- - **Cons**: Cannot be easily revoked before expiration.
63
-
64
- ### The JWT "Refresh Token" Pattern
65
- ```typescript
66
- // Scenario: API authentication
67
- // 1. Access Token (Short-lived: 15 mins)
68
- const accessToken = jwt.sign({ userId: user.id }, JWT_SECRET, {
69
- expiresIn: "15m",
70
- algorithm: "HS256" // ALWAYS explicitly specify
71
- });
72
- // 2. Refresh Token (Long-lived: 7 days, opaque string in DB)
73
- const refreshToken = crypto.randomBytes(40).toString('hex');
74
- await db.refreshTokens.create({ token: refreshToken, userId: user.id, expires: addDays(7) });
75
-
76
- // Client flow:
77
- // - Access token kept in memory (JS variable) to prevent XSS theft.
78
- // - Refresh token kept in HttpOnly cookie.
79
- // - When Access Token expires, endpoint reads cookie, validates DB, issues new Access Token.
80
- ```
81
-
82
- ---
83
-
84
- ## OAuth2 & OIDC (OpenID Connect)
85
-
86
- ```
87
- Roles:
88
- 1. Resource Owner (User)
89
- 2. Client (Your App)
90
- 3. Authorization Server (Google/GitHub/Auth0)
91
- 4. Resource Server (API)
92
-
93
- Flow (Authorization Code + PKCE):
94
- 1. User clicks "Login with Google".
95
- 2. App generates `code_verifier` and `code_challenge`.
96
- 3. App redirects user to Google with `code_challenge`.
97
- 4. User logs in, Google redirects back to App with an authorization `code`.
98
- 5. App sends `code` + `code_verifier` to Google backend.
99
- 6. Google returns `id_token` (OIDC identity) and `access_token` (OAuth permissions).
100
-
101
- // ❌ HALLUCINATION TRAP: Implicit Flow is deprecated.
102
- // Never use Implicit Flow (response_type=token) where the token is returned in the URL hash.
103
- // Always use Authorization Code Flow with PKCE, even for Single Page Apps (SPAs).
104
- ```
105
-
106
- ---
107
-
108
- ## Multi-Factor Authentication (MFA)
109
-
110
- - **SMS**: Deprecated by NIST due to SIM swapping vulnerabilities. (Better than nothing, but avoid as primary MFA).
111
- - **TOTP (Authenticator Apps)**: Standard implementations use HMAC-SHA1. Keep the secret key heavily encrypted at rest.
112
- - **WebAuthn / Passkeys**: The modern gold standard. Replaces passwords entirely using hardware enclaves (FaceID, TouchID, YubiKey).
113
-
114
- ---
115
-
116
- ## Authorization Models
117
-
118
- ### RBAC (Role-Based Access Control)
119
- - Users have Roles (`admin`, `editor`, `viewer`).
120
- - Roles have Permissions (`create:post`, `delete:user`).
121
-
122
- ```typescript
123
- // ✅ Check permissions, not roles directly (more flexible)
124
- if (!user.permissions.includes("delete:user")) {
125
- throw new ForbiddenError();
126
- }
127
- ```
128
-
129
- ### ABAC (Attribute-Based Access Control)
130
- - Access based on context (e.g., "User can edit Document if Document.department == User.department").
131
-
132
- ```typescript
133
- // Example Policy
134
- function canEditPost(user: User, post: Post): boolean {
135
- if (user.role === "admin") return true;
136
- if (post.authorId === user.id) return true;
137
- if (post.status === "draft" && user.department === "content") return true;
138
- return false;
139
- }
140
- ```
141
-
142
- ---
143
-
144
- ## 🤖 LLM-Specific Traps (Authentication)
145
-
146
- 1. **Building Custom Crypto:** AI often tries to invent hashing algorithms or token generators. Never allow custom crypto. Use established standard libraries.
147
- 2. **`jwt.verify` without `algorithms`:** AI frequently omits the `algorithms: ["HS256"]` array, leaving the app vulnerable to "None" algorithm bypass attacks.
148
- 3. **Storing JWTs in `localStorage`:** Exposes tokens to XSS. Access tokens go in memory, refresh tokens go in `HttpOnly` cookies.
149
- 4. **Using MD5/SHA256 for Passwords:** Hash functions must be slow. Enforce Argon2id or bcrypt.
150
- 5. **Implicit OAuth Flow:** AI trained on legacy code will suggest implicit flow for SPAs. Demand PKCE.
151
- 6. **Stateless Revocation Illusion:** AI will claim you can revoke a JWT without a database. You cannot. Blacklisting requires state.
152
- 7. **Authorization after Logic:** Perm checks must happen *before* database mutations, not after.
153
- 8. **Logging Passwords:** AI error handlers might log the raw `req.body` during a login failure, exposing plaintext passwords to Datadog/CloudWatch.
154
- 9. **Missing Rate Limiting:** Login endpoints without aggressive rate limiting invite brute force attacks.
155
- 10. **Constant Time String Comparison:** Using `a === b` for token/password comparison allows timing attacks. Always use `crypto.timingSafeEqual`.
156
-
157
- ---
158
-
159
- ## 🏛️ Tribunal Integration
160
-
161
- ### ✅ Pre-Flight Self-Audit
162
- ```
163
- ✅ Are passwords hashed using Argon2 or bcrypt?
164
- ✅ Are session cookies marked HttpOnly, Secure, and SameSite?
165
- ✅ Does jwt.verify explicitly specify the allowed algorithms?
166
- ✅ Is token comparison using timingSafeEqual?
167
- ✅ Are we avoiding localStorage for sensitive tokens?
168
- ✅ Is the OAuth implementation using Authorization Code + PKCE?
169
- ✅ Is there aggressive rate limiting on the login/password-reset endpoints?
170
- ✅ Are auth checks performed BEFORE any business logic/DB operations?
171
- ✅ Is req.body explicitly filtered in logs to avoid exposing passwords?
172
- ✅ Did I rely on vetted libraries instead of writing custom auth logic?
173
- ```
1
+ ---
2
+ name: authentication-best-practices
3
+ description: Authentication and Authorization mastery. Best practices for OAuth2, OpenID Connect, JWT (JSON Web Tokens), session management, password hashing, MFA (Multi-Factor Authentication), RBAC/ABAC, SSO, and secure credential storage. Use when auditing or implementing login flows, identity systems, or access control.
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
+ # Authentication & Authorization — Identity Mastery
11
+
12
+ ---
13
+
14
+ ## Passwords & Hashing
15
+
16
+ ```typescript
17
+ // BAD: md5, sha1, sha256 (too fast, vulnerable to brute force/rainbow tables)
18
+ const hash = crypto.createHash('sha256').update(password).digest('hex');
19
+
20
+ // GOOD: Argon2 (memory-hard, ASIC resistant) or bcrypt
21
+ import * as argon2 from "argon2";
22
+
23
+ async function hashPassword(password: string): Promise<string> {
24
+ // Argon2 hashes include the salt inherently in the resulting string
25
+ return await argon2.hash(password, {
26
+ type: argon2.argon2id, // recommended variant
27
+ memoryCost: 2 ** 16, // 64 MB
28
+ timeCost: 3, // iterations
29
+ parallelism: 1, // threads
30
+ });
31
+ }
32
+
33
+ async function verifyPassword(hash: string, password: string): Promise<boolean> {
34
+ return await argon2.verify(hash, password);
35
+ }
36
+ ```
37
+
38
+ ### Password Policies
39
+ - **Length over complexity**: Require minimum 12 characters. Stop requiring arbitrary symbols (e.g., `!@#`).
40
+ - **Check against breaches**: Use HaveIBeenPwned API or similar to reject compromised passwords during signup.
41
+ - **Never expire passwords arbitrarily**: Only force resets if there is evidence of a breach.
42
+
43
+ ---
44
+
45
+ ## Session Management vs. JWT
46
+
47
+ ### 1. Stateful Sessions (Cookies)
48
+ **Best for**: Monolithic web apps, SSR apps (Next.js, Remix).
49
+ - Server stores session ID mapped to user data in Redis/DB.
50
+ - Client stores session ID in an `HttpOnly`, `Secure`, `SameSite=Lax/Strict` cookie.
51
+ - **Pros**: Immediate revocation, server-side truth, invisible to XSS.
52
+ - **Cons**: Requires DB lookup per request.
53
+
54
+ ### 2. Stateless JWT (JSON Web Tokens)
55
+ **Best for**: Distributed APIs, Microservices, Native mobile apps.
56
+ - Server signs a token containing user claims.
57
+ - Client passes it in `Authorization: Bearer <token>` header.
58
+ - **Pros**: No DB lookup needed, easy cross-origin sharing.
59
+ - **Cons**: Cannot be easily revoked before expiration.
60
+
61
+ ### The JWT "Refresh Token" Pattern
62
+ ```typescript
63
+ // Scenario: API authentication
64
+ // 1. Access Token (Short-lived: 15 mins)
65
+ const accessToken = jwt.sign({ userId: user.id }, JWT_SECRET, {
66
+ expiresIn: "15m",
67
+ algorithm: "HS256" // ALWAYS explicitly specify
68
+ });
69
+ // 2. Refresh Token (Long-lived: 7 days, opaque string in DB)
70
+ const refreshToken = crypto.randomBytes(40).toString('hex');
71
+ await db.refreshTokens.create({ token: refreshToken, userId: user.id, expires: addDays(7) });
72
+
73
+ // Client flow:
74
+ // - Access token kept in memory (JS variable) to prevent XSS theft.
75
+ // - Refresh token kept in HttpOnly cookie.
76
+ // - When Access Token expires, endpoint reads cookie, validates DB, issues new Access Token.
77
+ ```
78
+
79
+ ---
80
+
81
+ ## OAuth2 & OIDC (OpenID Connect)
82
+
83
+ ```
84
+ Roles:
85
+ 1. Resource Owner (User)
86
+ 2. Client (Your App)
87
+ 3. Authorization Server (Google/GitHub/Auth0)
88
+ 4. Resource Server (API)
89
+
90
+ Flow (Authorization Code + PKCE):
91
+ 1. User clicks "Login with Google".
92
+ 2. App generates `code_verifier` and `code_challenge`.
93
+ 3. App redirects user to Google with `code_challenge`.
94
+ 4. User logs in, Google redirects back to App with an authorization `code`.
95
+ 5. App sends `code` + `code_verifier` to Google backend.
96
+ 6. Google returns `id_token` (OIDC identity) and `access_token` (OAuth permissions).
97
+
98
+ // HALLUCINATION TRAP: Implicit Flow is deprecated.
99
+ // Never use Implicit Flow (response_type=token) where the token is returned in the URL hash.
100
+ // Always use Authorization Code Flow with PKCE, even for Single Page Apps (SPAs).
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Multi-Factor Authentication (MFA)
106
+
107
+ - **SMS**: Deprecated by NIST due to SIM swapping vulnerabilities. (Better than nothing, but avoid as primary MFA).
108
+ - **TOTP (Authenticator Apps)**: Standard implementations use HMAC-SHA1. Keep the secret key heavily encrypted at rest.
109
+ - **WebAuthn / Passkeys**: The modern gold standard. Replaces passwords entirely using hardware enclaves (FaceID, TouchID, YubiKey).
110
+
111
+ ---
112
+
113
+ ## Authorization Models
114
+
115
+ ### RBAC (Role-Based Access Control)
116
+ - Users have Roles (`admin`, `editor`, `viewer`).
117
+ - Roles have Permissions (`create:post`, `delete:user`).
118
+
119
+ ```typescript
120
+ // Check permissions, not roles directly (more flexible)
121
+ if (!user.permissions.includes("delete:user")) {
122
+ throw new ForbiddenError();
123
+ }
124
+ ```
125
+
126
+ ### ABAC (Attribute-Based Access Control)
127
+ - Access based on context (e.g., "User can edit Document if Document.department == User.department").
128
+
129
+ ```typescript
130
+ // Example Policy
131
+ function canEditPost(user: User, post: Post): boolean {
132
+ if (user.role === "admin") return true;
133
+ if (post.authorId === user.id) return true;
134
+ if (post.status === "draft" && user.department === "content") return true;
135
+ return false;
136
+ }
137
+ ```
138
+
139
+ ---
@@ -1,154 +1,129 @@
1
- ---
2
- name: bash-linux
3
- description: Bash/Linux terminal mastery. Shell scripting, piping, stream redirection, process substitution, strict mode (set -euo pipefail), AWK, ripgrep parsing, and robust error handling. Use when writing CI scripts, debugging POSIX environments, or manipulating text pipelines.
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
- # Bash & Linux — Shell Scripting Mastery
11
-
12
- > Bash is powerful but fragile by default.
13
- > An unchecked failure in a shell script will happily cascade into deleting production.
14
-
15
- ---
16
-
17
- ## 1. Bash Strict Mode (Mandatory)
18
-
19
- Always start every single bash script with strict compilation flags.
20
-
21
- ```bash
22
- #!/usr/bin/env bash
23
-
24
- # ❌ BAD: Default bash execution
25
- # - Undefined variables evaluate to empty strings
26
- # - Failed commands are ignored, execution continues blindly
27
- # - Piped failures are hidden (only last command exit code matters)
28
-
29
- # ✅ GOOD: Strict Mode
30
- set -euo pipefail
31
- IFS=$'\n\t'
32
-
33
- # -e: Exit immediately if a command exits with a non-zero status.
34
- # -u: Treat unset variables as an error and exit immediately.
35
- # -o pipefail: Pipeline returns the status of the rightmost command to exit with a non-zero status.
36
- # IFS: Only split on newlines and tabs, not spaces (prevents terrifying globbing/array bugs).
37
-
38
- # Example: Catching potential disasters
39
- unset MY_VAR
40
- rm -rf "/some/path/${MY_VAR}" # With 'set -u', this throws an error instead of running 'rm -rf /some/path/'
41
- ```
42
-
43
- ---
44
-
45
- ## 2. Advanced Stream Manipulation
46
-
47
- Piping allows passing stdout from one program into stdin of another.
48
-
49
- ```bash
50
- # ❌ VULNERABLE: Useless Use of Cat (UUOC)
51
- cat file.txt | grep "error"
52
-
53
- # EFFICIENT: Direct parsing
54
- grep "error" file.txt
55
- # Or modern ripgrep for huge repositories:
56
- rg "error" file.txt
57
-
58
- # Process Substitution: Treating tool outputs as if they were files
59
- # Compare two remote JSON responses without writing to disk
60
- diff <(curl -s api.com/v1) <(curl -s api.com/v2)
61
-
62
- # Redirection Mastery
63
- # 1> stdout, 2> stderr
64
- command > output.txt 2> error.txt # Split streams
65
- command > all.txt 2>&1 # Combine streams (POSIX)
66
- command &> all.txt # Combine streams (Bash shortcut)
67
- command >/dev/null 2>&1 # Subdue all output cleanly
68
- ```
69
-
70
- ---
71
-
72
- ## 3. AWK and Stream Formatting
73
-
74
- AWK is a complete programming language designed for text processing.
75
-
76
- ```bash
77
- # Example: We have a ps aux output and we want the PIDs (column 2) of all Node processes
78
- ps aux | grep node | awk '{print $2}'
79
-
80
- # Example: Summing numbers in column 3 from a CSV
81
- cat data.csv | awk -F ',' '{sum+=$3} END {print sum}'
82
-
83
- # Extracting specific lines (e.g. line 5 to 10)
84
- sed -n '5,10p' file.txt
85
- ```
86
-
87
- ---
88
-
89
- ## 4. Modern CLI Alternatives (The 2026 Stack)
90
-
91
- Standard POSIX tools are reliable but slow. Use modern Rust-based alternatives when available in CI/CD.
92
-
93
- | Task | Legacy POSIX | Modern Alternative | Why? |
94
- |:---|:---|:---|:---|
95
- | Find files | `find . -name "*.ts"` | `fd -e ts` | Context-aware, respects `.gitignore`, 10x faster. |
96
- | Search text | `grep -r "auth"` | `rg "auth"` | Ripgrep uses multi-threading and SIMD instructions. |
97
- | Inspect JSON | `grep / awk` | `jq '.users[].id'` | `jq` explicitly parses and filters valid JSON arrays/objects. |
98
- | Process monitoring | `top` | `htop` / `btm` | Interactive metrics. |
99
- | Check curl | `curl -i` | `httpie` / `xh` | Colorized, structured JSON networking. |
100
-
101
- ---
102
-
103
- ## 5. File System Traps & Quoting
104
-
105
- If a filename contains a space and you didn't quote your variable, your script will crash or delete the wrong files.
106
-
107
- ```bash
108
- # Let FILE="my backup.tar"
109
-
110
- # ❌ BAD: Evaluates as `rm my` AND `backup.tar` -> Two different files!
111
- rm $FILE
112
-
113
- # ✅ GOOD: Always quote string variables
114
- rm "$FILE"
115
-
116
- # GOOD: Array iteration (Using quotes specifically formatted with @)
117
- FILES=("file 1.txt" "file 2.txt")
118
- for file in "${FILES[@]}"; do
119
- echo "Processing: $file"
120
- done
121
- ```
122
-
123
- ---
124
-
125
- ## 🤖 LLM-Specific Traps (Bash/Linux)
126
-
127
- 1. **Forgetting Strict Mode:** AI commonly forgets `set -euo pipefail`, creating fragile, dangerous scripts that cascade failures.
128
- 2. **Missing Quotes:** AI writes `echo $USER_INPUT` instead of `echo "$USER_INPUT"`, leading to glob-splitting exploits and file deletion errors.
129
- 3. **Useless Cat:** `cat file.txt | awk ...` instead of `awk ... file.txt`.
130
- 4. **Regex in Grep:** AI attempts complex regex in standard `grep` which often fails due to dialect differences (BSD vs GNU). Use `grep -E` (Extended) or modern `rg`.
131
- 5. **Awkward JSON parsing:** AI writing labyrinthine `sed`/`grep` chains to extract a field from JSON. Always use `jq`.
132
- 6. **Hardcoded Paths:** Using `/home/user/script` instead of dynamic resolutions like `$(dirname "$0")` to find files relative to the script location.
133
- 7. **Dangerous Globbing:** `rm *.txt` will fail if there are too many files ("Arg list too long"). AI fails to use `find . -name "*.txt" -delete` for large ops.
134
- 8. **Silent Failures in Pipes:** AI assumes `command1 | command2` throws an error if `command1` fails. It doesn't, unless `set -o pipefail` is active.
135
- 9. **Environment Pollution:** Executing exports globally (`export VAR=1`) inside utility scripts. Changes pollute the user's active shell.
136
- 10. **Blind Sudo Execution:** Suggesting users pipe curled scripts directly into `sudo bash` (`curl api.com/setup | sudo bash`). Always inspect scripts first.
137
-
138
- ---
139
-
140
- ## 🏛️ Tribunal Integration
141
-
142
- ### ✅ Pre-Flight Self-Audit
143
- ```
144
- ✅ Does the script begin with `set -euo pipefail`?
145
- ✅ Are all variable expansions wrapped in double quotes `"$VAR"`?
146
- ✅ Am I using `jq` for handling JSON responses rather than `sed`/`grep`?
147
- ✅ Is the script executing locally relative paths using `$(dirname "$0")`?
148
- ✅ Have I avoided "Useless Use of Cat" (`cat X | Y`)?
149
- ✅ Did I properly manage stderr and stdout streams (`2>&1`)?
150
- ✅ Have I avoided executing destructive wildcard globs (`rm -rf *`)?
151
- ✅ Is my text searching leveraging `-E` for extended regex if I use lookaheads?
152
- ✅ Did I use array expansion strictly as `"${ARRAY[@]}"`?
153
- ✅ If suggesting installation, did I avoid `curl | sudo bash`?
154
- ```
1
+ ---
2
+ name: bash-linux
3
+ description: Bash/Linux terminal mastery. Shell scripting, piping, stream redirection, process substitution, strict mode (set -euo pipefail), AWK, ripgrep parsing, and robust error handling. Use when writing CI scripts, debugging POSIX environments, or manipulating text pipelines.
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
+ - ❌ Scripts without `set -euo pipefail` -> ✅ Always enable strict mode to catch silent failures
12
+ - Using `[ ]` instead of `[[ ]]` for conditionals -> ✅ `[[ ]]` handles spaces in variables and supports regex
13
+ - Parsing `ls` output -> Use `find` or glob expansion instead; `ls` output is not portable
14
+ - ❌ `cat file | grep` (useless use of cat) -> ✅ `grep pattern file` directly
15
+
16
+ ---
17
+
18
+
19
+ # Bash & Linux Shell Scripting Mastery
20
+
21
+ ---
22
+
23
+ ## 1. Bash Strict Mode (Mandatory)
24
+
25
+ Always start every single bash script with strict compilation flags.
26
+
27
+ ```bash
28
+ #!/usr/bin/env bash
29
+
30
+ # BAD: Default bash execution
31
+ # - Undefined variables evaluate to empty strings
32
+ # - Failed commands are ignored, execution continues blindly
33
+ # - Piped failures are hidden (only last command exit code matters)
34
+
35
+ # GOOD: Strict Mode
36
+ set -euo pipefail
37
+ IFS=$'\n\t'
38
+
39
+ # -e: Exit immediately if a command exits with a non-zero status.
40
+ # -u: Treat unset variables as an error and exit immediately.
41
+ # -o pipefail: Pipeline returns the status of the rightmost command to exit with a non-zero status.
42
+ # IFS: Only split on newlines and tabs, not spaces (prevents terrifying globbing/array bugs).
43
+
44
+ # Example: Catching potential disasters
45
+ unset MY_VAR
46
+ rm -rf "/some/path/${MY_VAR}" # With 'set -u', this throws an error instead of running 'rm -rf /some/path/'
47
+ ```
48
+
49
+ ---
50
+
51
+ ## 2. Advanced Stream Manipulation
52
+
53
+ Piping allows passing stdout from one program into stdin of another.
54
+
55
+ ```bash
56
+ # VULNERABLE: Useless Use of Cat (UUOC)
57
+ cat file.txt | grep "error"
58
+
59
+ # EFFICIENT: Direct parsing
60
+ grep "error" file.txt
61
+ # Or modern ripgrep for huge repositories:
62
+ rg "error" file.txt
63
+
64
+ # Process Substitution: Treating tool outputs as if they were files
65
+ # Compare two remote JSON responses without writing to disk
66
+ diff <(curl -s api.com/v1) <(curl -s api.com/v2)
67
+
68
+ # Redirection Mastery
69
+ # 1> stdout, 2> stderr
70
+ command > output.txt 2> error.txt # Split streams
71
+ command > all.txt 2>&1 # Combine streams (POSIX)
72
+ command &> all.txt # Combine streams (Bash shortcut)
73
+ command >/dev/null 2>&1 # Subdue all output cleanly
74
+ ```
75
+
76
+ ---
77
+
78
+ ## 3. AWK and Stream Formatting
79
+
80
+ AWK is a complete programming language designed for text processing.
81
+
82
+ ```bash
83
+ # Example: We have a ps aux output and we want the PIDs (column 2) of all Node processes
84
+ ps aux | grep node | awk '{print $2}'
85
+
86
+ # Example: Summing numbers in column 3 from a CSV
87
+ cat data.csv | awk -F ',' '{sum+=$3} END {print sum}'
88
+
89
+ # Extracting specific lines (e.g. line 5 to 10)
90
+ sed -n '5,10p' file.txt
91
+ ```
92
+
93
+ ---
94
+
95
+ ## 4. Modern CLI Alternatives (The 2026 Stack)
96
+
97
+ Standard POSIX tools are reliable but slow. Use modern Rust-based alternatives when available in CI/CD.
98
+
99
+ |Task|Legacy POSIX|Modern Alternative|Why?|
100
+ |:---|:---|:---|:---|
101
+ |Find files|`find . -name "*.ts"`|`fd -e ts`|Context-aware, respects `.gitignore`, 10x faster.|
102
+ |Search text|`grep -r "auth"`|`rg "auth"`|Ripgrep uses multi-threading and SIMD instructions.|
103
+ |Inspect JSON|`grep / awk`|`jq '.users[].id'`|`jq` explicitly parses and filters valid JSON arrays/objects.|
104
+ |Process monitoring|`top`|`htop` / `btm`|Interactive metrics.|
105
+ |Check curl|`curl -i`|`httpie` / `xh`|Colorized, structured JSON networking.|
106
+
107
+ ---
108
+
109
+ ## 5. File System Traps & Quoting
110
+
111
+ If a filename contains a space and you didn't quote your variable, your script will crash or delete the wrong files.
112
+
113
+ ```bash
114
+ # Let FILE="my backup.tar"
115
+
116
+ # BAD: Evaluates as `rm my` AND `backup.tar` -> Two different files!
117
+ rm $FILE
118
+
119
+ # ✅ GOOD: Always quote string variables
120
+ rm "$FILE"
121
+
122
+ # ✅ GOOD: Array iteration (Using quotes specifically formatted with @)
123
+ FILES=("file 1.txt" "file 2.txt")
124
+ for file in "${FILES[@]}"; do
125
+ echo "Processing: $file"
126
+ done
127
+ ```
128
+
129
+ ---