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,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,120 @@
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
+ # Bash & Linux — Shell Scripting Mastery
11
+
12
+ ---
13
+
14
+ ## 1. Bash Strict Mode (Mandatory)
15
+
16
+ Always start every single bash script with strict compilation flags.
17
+
18
+ ```bash
19
+ #!/usr/bin/env bash
20
+
21
+ # ❌ BAD: Default bash execution
22
+ # - Undefined variables evaluate to empty strings
23
+ # - Failed commands are ignored, execution continues blindly
24
+ # - Piped failures are hidden (only last command exit code matters)
25
+
26
+ # GOOD: Strict Mode
27
+ set -euo pipefail
28
+ IFS=$'\n\t'
29
+
30
+ # -e: Exit immediately if a command exits with a non-zero status.
31
+ # -u: Treat unset variables as an error and exit immediately.
32
+ # -o pipefail: Pipeline returns the status of the rightmost command to exit with a non-zero status.
33
+ # IFS: Only split on newlines and tabs, not spaces (prevents terrifying globbing/array bugs).
34
+
35
+ # Example: Catching potential disasters
36
+ unset MY_VAR
37
+ rm -rf "/some/path/${MY_VAR}" # With 'set -u', this throws an error instead of running 'rm -rf /some/path/'
38
+ ```
39
+
40
+ ---
41
+
42
+ ## 2. Advanced Stream Manipulation
43
+
44
+ Piping allows passing stdout from one program into stdin of another.
45
+
46
+ ```bash
47
+ # VULNERABLE: Useless Use of Cat (UUOC)
48
+ cat file.txt | grep "error"
49
+
50
+ # EFFICIENT: Direct parsing
51
+ grep "error" file.txt
52
+ # Or modern ripgrep for huge repositories:
53
+ rg "error" file.txt
54
+
55
+ # Process Substitution: Treating tool outputs as if they were files
56
+ # Compare two remote JSON responses without writing to disk
57
+ diff <(curl -s api.com/v1) <(curl -s api.com/v2)
58
+
59
+ # Redirection Mastery
60
+ # 1> stdout, 2> stderr
61
+ command > output.txt 2> error.txt # Split streams
62
+ command > all.txt 2>&1 # Combine streams (POSIX)
63
+ command &> all.txt # Combine streams (Bash shortcut)
64
+ command >/dev/null 2>&1 # Subdue all output cleanly
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 3. AWK and Stream Formatting
70
+
71
+ AWK is a complete programming language designed for text processing.
72
+
73
+ ```bash
74
+ # Example: We have a ps aux output and we want the PIDs (column 2) of all Node processes
75
+ ps aux | grep node | awk '{print $2}'
76
+
77
+ # Example: Summing numbers in column 3 from a CSV
78
+ cat data.csv | awk -F ',' '{sum+=$3} END {print sum}'
79
+
80
+ # Extracting specific lines (e.g. line 5 to 10)
81
+ sed -n '5,10p' file.txt
82
+ ```
83
+
84
+ ---
85
+
86
+ ## 4. Modern CLI Alternatives (The 2026 Stack)
87
+
88
+ Standard POSIX tools are reliable but slow. Use modern Rust-based alternatives when available in CI/CD.
89
+
90
+ |Task|Legacy POSIX|Modern Alternative|Why?|
91
+ |:---|:---|:---|:---|
92
+ |Find files|`find . -name "*.ts"`|`fd -e ts`|Context-aware, respects `.gitignore`, 10x faster.|
93
+ |Search text|`grep -r "auth"`|`rg "auth"`|Ripgrep uses multi-threading and SIMD instructions.|
94
+ |Inspect JSON|`grep / awk`|`jq '.users[].id'`|`jq` explicitly parses and filters valid JSON arrays/objects.|
95
+ |Process monitoring|`top`|`htop` / `btm`|Interactive metrics.|
96
+ |Check curl|`curl -i`|`httpie` / `xh`|Colorized, structured JSON networking.|
97
+
98
+ ---
99
+
100
+ ## 5. File System Traps & Quoting
101
+
102
+ If a filename contains a space and you didn't quote your variable, your script will crash or delete the wrong files.
103
+
104
+ ```bash
105
+ # Let FILE="my backup.tar"
106
+
107
+ # ❌ BAD: Evaluates as `rm my` AND `backup.tar` -> Two different files!
108
+ rm $FILE
109
+
110
+ # GOOD: Always quote string variables
111
+ rm "$FILE"
112
+
113
+ # ✅ GOOD: Array iteration (Using quotes specifically formatted with @)
114
+ FILES=("file 1.txt" "file 2.txt")
115
+ for file in "${FILES[@]}"; do
116
+ echo "Processing: $file"
117
+ done
118
+ ```
119
+
120
+ ---