cursor-kit-cli 1.2.0-beta → 1.2.0-beta.2
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.
- package/dist/cli.cjs +333 -56
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +334 -57
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +39 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +33 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/commands/docs.md +5 -3
- package/templates/commands/explain.md +5 -3
- package/templates/commands/fix.md +5 -3
- package/templates/commands/implement.md +5 -3
- package/templates/commands/refactor.md +5 -3
- package/templates/commands/review.md +5 -3
- package/templates/commands/test.md +5 -3
- package/templates/manifest.json +11 -8
- package/templates/rules/git.mdc +0 -2
- package/templates/rules/toc.mdc +17 -9
- package/templates/skills/aesthetic/SKILL.md +121 -0
- package/templates/skills/aesthetic/assets/design-guideline-template.md +163 -0
- package/templates/skills/aesthetic/assets/design-story-template.md +135 -0
- package/templates/skills/aesthetic/references/design-principles.md +62 -0
- package/templates/skills/aesthetic/references/design-resources.md +75 -0
- package/templates/skills/aesthetic/references/micro-interactions.md +53 -0
- package/templates/skills/aesthetic/references/storytelling-design.md +50 -0
- package/templates/skills/backend-development/SKILL.mdc +95 -0
- package/templates/skills/backend-development/references/backend-api-design.md +495 -0
- package/templates/skills/backend-development/references/backend-architecture.md +454 -0
- package/templates/skills/backend-development/references/backend-authentication.md +338 -0
- package/templates/skills/backend-development/references/backend-code-quality.md +659 -0
- package/templates/skills/backend-development/references/backend-debugging.md +904 -0
- package/templates/skills/backend-development/references/backend-devops.md +494 -0
- package/templates/skills/backend-development/references/backend-mindset.md +387 -0
- package/templates/skills/backend-development/references/backend-performance.md +397 -0
- package/templates/skills/backend-development/references/backend-security.md +290 -0
- package/templates/skills/backend-development/references/backend-technologies.md +256 -0
- package/templates/skills/backend-development/references/backend-testing.md +429 -0
- package/templates/skills/frontend-design/SKILL.mdc +41 -0
- package/templates/skills/frontend-design/references/animejs.md +396 -0
- package/templates/skills/frontend-development/SKILL.mdc +399 -0
- package/templates/skills/frontend-development/resources/common-patterns.md +331 -0
- package/templates/skills/frontend-development/resources/complete-examples.md +872 -0
- package/templates/skills/frontend-development/resources/component-patterns.md +502 -0
- package/templates/skills/frontend-development/resources/data-fetching.md +767 -0
- package/templates/skills/frontend-development/resources/file-organization.md +502 -0
- package/templates/skills/frontend-development/resources/loading-and-error-states.md +501 -0
- package/templates/skills/frontend-development/resources/performance.md +406 -0
- package/templates/skills/frontend-development/resources/routing-guide.md +364 -0
- package/templates/skills/frontend-development/resources/styling-guide.md +428 -0
- package/templates/skills/frontend-development/resources/typescript-standards.md +418 -0
- package/templates/skills/problem-solving/SKILL.mdc +96 -0
- package/templates/skills/problem-solving/references/attribution.md +69 -0
- package/templates/skills/problem-solving/references/collision-zone-thinking.md +79 -0
- package/templates/skills/problem-solving/references/inversion-exercise.md +91 -0
- package/templates/skills/problem-solving/references/meta-pattern-recognition.md +87 -0
- package/templates/skills/problem-solving/references/scale-game.md +95 -0
- package/templates/skills/problem-solving/references/simplification-cascades.md +80 -0
- package/templates/skills/problem-solving/references/when-stuck.md +72 -0
- package/templates/skills/research/SKILL.mdc +168 -0
- package/templates/skills/sequential-thinking/.env.example +8 -0
- package/templates/skills/sequential-thinking/README.md +183 -0
- package/templates/skills/sequential-thinking/SKILL.mdc +94 -0
- package/templates/skills/sequential-thinking/package.json +31 -0
- package/templates/skills/sequential-thinking/references/advanced-strategies.md +79 -0
- package/templates/skills/sequential-thinking/references/advanced-techniques.md +76 -0
- package/templates/skills/sequential-thinking/references/core-patterns.md +95 -0
- package/templates/skills/sequential-thinking/references/examples-api.md +88 -0
- package/templates/skills/sequential-thinking/references/examples-architecture.md +94 -0
- package/templates/skills/sequential-thinking/references/examples-debug.md +90 -0
- package/templates/skills/sequential-thinking/scripts/format-thought.js +159 -0
- package/templates/skills/sequential-thinking/scripts/process-thought.js +236 -0
- package/templates/skills/sequential-thinking/tests/format-thought.test.js +133 -0
- package/templates/skills/sequential-thinking/tests/process-thought.test.js +215 -0
- package/templates/skills/ui-styling/LICENSE.txt +202 -0
- package/templates/skills/ui-styling/SKILL.mdc +321 -0
- package/templates/skills/ui-styling/references/canvas-design-system.md +320 -0
- package/templates/skills/ui-styling/references/shadcn-accessibility.md +471 -0
- package/templates/skills/ui-styling/references/shadcn-components.md +424 -0
- package/templates/skills/ui-styling/references/shadcn-theming.md +373 -0
- package/templates/skills/ui-styling/references/tailwind-customization.md +483 -0
- package/templates/skills/ui-styling/references/tailwind-responsive.md +382 -0
- package/templates/skills/ui-styling/references/tailwind-utilities.md +455 -0
- package/templates/rules/frontend-design.mdc +0 -48
- package/templates/rules/performance.mdc +0 -54
- package/templates/rules/react.mdc +0 -58
- package/templates/rules/security.mdc +0 -50
- package/templates/rules/testing.mdc +0 -54
- package/templates/rules/typescript.mdc +0 -36
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
# TypeScript Standards
|
|
2
|
+
|
|
3
|
+
TypeScript best practices for type safety and maintainability in React frontend code.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Strict Mode
|
|
8
|
+
|
|
9
|
+
### Configuration
|
|
10
|
+
|
|
11
|
+
TypeScript strict mode is **enabled** in the project:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
// tsconfig.json
|
|
15
|
+
{
|
|
16
|
+
"compilerOptions": {
|
|
17
|
+
"strict": true,
|
|
18
|
+
"noImplicitAny": true,
|
|
19
|
+
"strictNullChecks": true
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**This means:**
|
|
25
|
+
- No implicit `any` types
|
|
26
|
+
- Null/undefined must be handled explicitly
|
|
27
|
+
- Type safety enforced
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## No `any` Type
|
|
32
|
+
|
|
33
|
+
### The Rule
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// ❌ NEVER use any
|
|
37
|
+
function handleData(data: any) {
|
|
38
|
+
return data.something;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ✅ Use specific types
|
|
42
|
+
interface MyData {
|
|
43
|
+
something: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function handleData(data: MyData) {
|
|
47
|
+
return data.something;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ✅ Or use unknown for truly unknown data
|
|
51
|
+
function handleUnknown(data: unknown) {
|
|
52
|
+
if (typeof data === 'object' && data !== null && 'something' in data) {
|
|
53
|
+
return (data as MyData).something;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**If you truly don't know the type:**
|
|
59
|
+
- Use `unknown` (forces type checking)
|
|
60
|
+
- Use type guards to narrow
|
|
61
|
+
- Document why type is unknown
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Explicit Return Types
|
|
66
|
+
|
|
67
|
+
### Function Return Types
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
// ✅ CORRECT - Explicit return type
|
|
71
|
+
function getUser(id: number): Promise<User> {
|
|
72
|
+
return apiClient.get(`/users/${id}`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function calculateTotal(items: Item[]): number {
|
|
76
|
+
return items.reduce((sum, item) => sum + item.price, 0);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ❌ AVOID - Implicit return type (less clear)
|
|
80
|
+
function getUser(id: number) {
|
|
81
|
+
return apiClient.get(`/users/${id}`);
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Component Return Types
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// React.FC already provides return type (ReactElement)
|
|
89
|
+
export const MyComponent: React.FC<Props> = ({ prop }) => {
|
|
90
|
+
return <div>{prop}</div>;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// For custom hooks
|
|
94
|
+
function useMyData(id: number): { data: Data; isLoading: boolean } {
|
|
95
|
+
const [data, setData] = useState<Data | null>(null);
|
|
96
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
97
|
+
|
|
98
|
+
return { data: data!, isLoading };
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Type Imports
|
|
105
|
+
|
|
106
|
+
### Use 'type' Keyword
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
// ✅ CORRECT - Explicitly mark as type import
|
|
110
|
+
import type { User } from '~types/user';
|
|
111
|
+
import type { Post } from '~types/post';
|
|
112
|
+
import type { SxProps, Theme } from '@mui/material';
|
|
113
|
+
|
|
114
|
+
// ❌ AVOID - Mixed value and type imports
|
|
115
|
+
import { User } from '~types/user'; // Unclear if type or value
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Benefits:**
|
|
119
|
+
- Clearly separates types from values
|
|
120
|
+
- Better tree-shaking
|
|
121
|
+
- Prevents circular dependencies
|
|
122
|
+
- TypeScript compiler optimization
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Component Prop Interfaces
|
|
127
|
+
|
|
128
|
+
### Interface Pattern
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
/**
|
|
132
|
+
* Props for MyComponent
|
|
133
|
+
*/
|
|
134
|
+
interface MyComponentProps {
|
|
135
|
+
/** The user ID to display */
|
|
136
|
+
userId: number;
|
|
137
|
+
|
|
138
|
+
/** Optional callback when action completes */
|
|
139
|
+
onComplete?: () => void;
|
|
140
|
+
|
|
141
|
+
/** Display mode for the component */
|
|
142
|
+
mode?: 'view' | 'edit';
|
|
143
|
+
|
|
144
|
+
/** Additional CSS classes */
|
|
145
|
+
className?: string;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export const MyComponent: React.FC<MyComponentProps> = ({
|
|
149
|
+
userId,
|
|
150
|
+
onComplete,
|
|
151
|
+
mode = 'view', // Default value
|
|
152
|
+
className,
|
|
153
|
+
}) => {
|
|
154
|
+
return <div>...</div>;
|
|
155
|
+
};
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Key Points:**
|
|
159
|
+
- Separate interface for props
|
|
160
|
+
- JSDoc comments for each prop
|
|
161
|
+
- Optional props use `?`
|
|
162
|
+
- Provide defaults in destructuring
|
|
163
|
+
|
|
164
|
+
### Props with Children
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
interface ContainerProps {
|
|
168
|
+
children: React.ReactNode;
|
|
169
|
+
title: string;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// React.FC automatically includes children type, but be explicit
|
|
173
|
+
export const Container: React.FC<ContainerProps> = ({ children, title }) => {
|
|
174
|
+
return (
|
|
175
|
+
<div>
|
|
176
|
+
<h2>{title}</h2>
|
|
177
|
+
{children}
|
|
178
|
+
</div>
|
|
179
|
+
);
|
|
180
|
+
};
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Utility Types
|
|
186
|
+
|
|
187
|
+
### Partial<T>
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
// Make all properties optional
|
|
191
|
+
type UserUpdate = Partial<User>;
|
|
192
|
+
|
|
193
|
+
function updateUser(id: number, updates: Partial<User>) {
|
|
194
|
+
// updates can have any subset of User properties
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Pick<T, K>
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// Select specific properties
|
|
202
|
+
type UserPreview = Pick<User, 'id' | 'name' | 'email'>;
|
|
203
|
+
|
|
204
|
+
const preview: UserPreview = {
|
|
205
|
+
id: 1,
|
|
206
|
+
name: 'John',
|
|
207
|
+
email: 'john@example.com',
|
|
208
|
+
// Other User properties not allowed
|
|
209
|
+
};
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Omit<T, K>
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// Exclude specific properties
|
|
216
|
+
type UserWithoutPassword = Omit<User, 'password' | 'passwordHash'>;
|
|
217
|
+
|
|
218
|
+
const publicUser: UserWithoutPassword = {
|
|
219
|
+
id: 1,
|
|
220
|
+
name: 'John',
|
|
221
|
+
email: 'john@example.com',
|
|
222
|
+
// password and passwordHash not allowed
|
|
223
|
+
};
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Required<T>
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
// Make all properties required
|
|
230
|
+
type RequiredConfig = Required<Config>; // All optional props become required
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Record<K, V>
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
// Type-safe object/map
|
|
237
|
+
const userMap: Record<string, User> = {
|
|
238
|
+
'user1': { id: 1, name: 'John' },
|
|
239
|
+
'user2': { id: 2, name: 'Jane' },
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
// For styles
|
|
243
|
+
import type { SxProps, Theme } from '@mui/material';
|
|
244
|
+
|
|
245
|
+
const styles: Record<string, SxProps<Theme>> = {
|
|
246
|
+
container: { p: 2 },
|
|
247
|
+
header: { mb: 1 },
|
|
248
|
+
};
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Type Guards
|
|
254
|
+
|
|
255
|
+
### Basic Type Guards
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
function isUser(data: unknown): data is User {
|
|
259
|
+
return (
|
|
260
|
+
typeof data === 'object' &&
|
|
261
|
+
data !== null &&
|
|
262
|
+
'id' in data &&
|
|
263
|
+
'name' in data
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Usage
|
|
268
|
+
if (isUser(response)) {
|
|
269
|
+
console.log(response.name); // TypeScript knows it's User
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Discriminated Unions
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
type LoadingState =
|
|
277
|
+
| { status: 'idle' }
|
|
278
|
+
| { status: 'loading' }
|
|
279
|
+
| { status: 'success'; data: Data }
|
|
280
|
+
| { status: 'error'; error: Error };
|
|
281
|
+
|
|
282
|
+
function Component({ state }: { state: LoadingState }) {
|
|
283
|
+
// TypeScript narrows type based on status
|
|
284
|
+
if (state.status === 'success') {
|
|
285
|
+
return <Display data={state.data} />; // data available here
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (state.status === 'error') {
|
|
289
|
+
return <Error error={state.error} />; // error available here
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return <Loading />;
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Generic Types
|
|
299
|
+
|
|
300
|
+
### Generic Functions
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
function getById<T>(items: T[], id: number): T | undefined {
|
|
304
|
+
return items.find(item => (item as any).id === id);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Usage with type inference
|
|
308
|
+
const users: User[] = [...];
|
|
309
|
+
const user = getById(users, 123); // Type: User | undefined
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Generic Components
|
|
313
|
+
|
|
314
|
+
```typescript
|
|
315
|
+
interface ListProps<T> {
|
|
316
|
+
items: T[];
|
|
317
|
+
renderItem: (item: T) => React.ReactNode;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export function List<T>({ items, renderItem }: ListProps<T>): React.ReactElement {
|
|
321
|
+
return (
|
|
322
|
+
<div>
|
|
323
|
+
{items.map((item, index) => (
|
|
324
|
+
<div key={index}>{renderItem(item)}</div>
|
|
325
|
+
))}
|
|
326
|
+
</div>
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Usage
|
|
331
|
+
<List<User>
|
|
332
|
+
items={users}
|
|
333
|
+
renderItem={(user) => <UserCard user={user} />}
|
|
334
|
+
/>
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Type Assertions (Use Sparingly)
|
|
340
|
+
|
|
341
|
+
### When to Use
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
// ✅ OK - When you know more than TypeScript
|
|
345
|
+
const element = document.getElementById('my-element') as HTMLInputElement;
|
|
346
|
+
const value = element.value;
|
|
347
|
+
|
|
348
|
+
// ✅ OK - API response that you've validated
|
|
349
|
+
const response = await api.getData();
|
|
350
|
+
const user = response.data as User; // You know the shape
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### When NOT to Use
|
|
354
|
+
|
|
355
|
+
```typescript
|
|
356
|
+
// ❌ AVOID - Circumventing type safety
|
|
357
|
+
const data = getData() as any; // WRONG - defeats TypeScript
|
|
358
|
+
|
|
359
|
+
// ❌ AVOID - Unsafe assertion
|
|
360
|
+
const value = unknownValue as string; // Might not actually be string
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Null/Undefined Handling
|
|
366
|
+
|
|
367
|
+
### Optional Chaining
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
// ✅ CORRECT
|
|
371
|
+
const name = user?.profile?.name;
|
|
372
|
+
|
|
373
|
+
// Equivalent to:
|
|
374
|
+
const name = user && user.profile && user.profile.name;
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Nullish Coalescing
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
// ✅ CORRECT
|
|
381
|
+
const displayName = user?.name ?? 'Anonymous';
|
|
382
|
+
|
|
383
|
+
// Only uses default if null or undefined
|
|
384
|
+
// (Different from || which triggers on '', 0, false)
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Non-Null Assertion (Use Carefully)
|
|
388
|
+
|
|
389
|
+
```typescript
|
|
390
|
+
// ✅ OK - When you're certain value exists
|
|
391
|
+
const data = queryClient.getQueryData<Data>(['data'])!;
|
|
392
|
+
|
|
393
|
+
// ⚠️ CAREFUL - Only use when you KNOW it's not null
|
|
394
|
+
// Better to check explicitly:
|
|
395
|
+
const data = queryClient.getQueryData<Data>(['data']);
|
|
396
|
+
if (data) {
|
|
397
|
+
// Use data
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## Summary
|
|
404
|
+
|
|
405
|
+
**TypeScript Checklist:**
|
|
406
|
+
- ✅ Strict mode enabled
|
|
407
|
+
- ✅ No `any` type (use `unknown` if needed)
|
|
408
|
+
- ✅ Explicit return types on functions
|
|
409
|
+
- ✅ Use `import type` for type imports
|
|
410
|
+
- ✅ JSDoc comments on prop interfaces
|
|
411
|
+
- ✅ Utility types (Partial, Pick, Omit, Required, Record)
|
|
412
|
+
- ✅ Type guards for narrowing
|
|
413
|
+
- ✅ Optional chaining and nullish coalescing
|
|
414
|
+
- ❌ Avoid type assertions unless necessary
|
|
415
|
+
|
|
416
|
+
**See Also:**
|
|
417
|
+
- [component-patterns.md](component-patterns.md) - Component typing
|
|
418
|
+
- [data-fetching.md](data-fetching.md) - API typing
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Problem-Solving Techniques
|
|
3
|
+
description: Apply systematic problem-solving techniques for complexity spirals (simplification cascades), innovation blocks (collision-zone thinking), recurring patterns (meta-pattern recognition), assumption constraints (inversion exercise), scale uncertainty (scale game), and dispatch when stuck. Techniques derived from Microsoft Amplifier project patterns adapted for immediate application.
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Problem-Solving Techniques
|
|
8
|
+
|
|
9
|
+
Systematic approaches for different types of stuck-ness. Each technique targets specific problem patterns.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
Apply when encountering:
|
|
14
|
+
- **Complexity spiraling** - Multiple implementations, growing special cases, excessive branching
|
|
15
|
+
- **Innovation blocks** - Conventional solutions inadequate, need breakthrough thinking
|
|
16
|
+
- **Recurring patterns** - Same issue across domains, reinventing solutions
|
|
17
|
+
- **Assumption constraints** - Forced into "only way", can't question premise
|
|
18
|
+
- **Scale uncertainty** - Production readiness unclear, edge cases unknown
|
|
19
|
+
- **General stuck-ness** - Unsure which technique applies
|
|
20
|
+
|
|
21
|
+
## Quick Dispatch
|
|
22
|
+
|
|
23
|
+
**Match symptom to technique:**
|
|
24
|
+
|
|
25
|
+
| Stuck Symptom | Technique | Reference |
|
|
26
|
+
|---------------|-----------|-----------|
|
|
27
|
+
| Same thing implemented 5+ ways, growing special cases | **Simplification Cascades** | `references/simplification-cascades.md` |
|
|
28
|
+
| Conventional solutions inadequate, need breakthrough | **Collision-Zone Thinking** | `references/collision-zone-thinking.md` |
|
|
29
|
+
| Same issue in different places, reinventing wheels | **Meta-Pattern Recognition** | `references/meta-pattern-recognition.md` |
|
|
30
|
+
| Solution feels forced, "must be done this way" | **Inversion Exercise** | `references/inversion-exercise.md` |
|
|
31
|
+
| Will this work at production? Edge cases unclear? | **Scale Game** | `references/scale-game.md` |
|
|
32
|
+
| Unsure which technique to use | **When Stuck** | `references/when-stuck.md` |
|
|
33
|
+
|
|
34
|
+
## Core Techniques
|
|
35
|
+
|
|
36
|
+
### 1. Simplification Cascades
|
|
37
|
+
Find one insight eliminating multiple components. "If this is true, we don't need X, Y, Z."
|
|
38
|
+
|
|
39
|
+
**Key insight:** Everything is a special case of one general pattern.
|
|
40
|
+
|
|
41
|
+
**Red flag:** "Just need to add one more case..." (repeating forever)
|
|
42
|
+
|
|
43
|
+
### 2. Collision-Zone Thinking
|
|
44
|
+
Force unrelated concepts together to discover emergent properties. "What if we treated X like Y?"
|
|
45
|
+
|
|
46
|
+
**Key insight:** Revolutionary ideas from deliberate metaphor-mixing.
|
|
47
|
+
|
|
48
|
+
**Red flag:** "I've tried everything in this domain"
|
|
49
|
+
|
|
50
|
+
### 3. Meta-Pattern Recognition
|
|
51
|
+
Spot patterns appearing in 3+ domains to find universal principles.
|
|
52
|
+
|
|
53
|
+
**Key insight:** Patterns in how patterns emerge reveal reusable abstractions.
|
|
54
|
+
|
|
55
|
+
**Red flag:** "This problem is unique" (probably not)
|
|
56
|
+
|
|
57
|
+
### 4. Inversion Exercise
|
|
58
|
+
Flip core assumptions to reveal hidden constraints. "What if the opposite were true?"
|
|
59
|
+
|
|
60
|
+
**Key insight:** Valid inversions reveal context-dependence of "rules."
|
|
61
|
+
|
|
62
|
+
**Red flag:** "There's only one way to do this"
|
|
63
|
+
|
|
64
|
+
### 5. Scale Game
|
|
65
|
+
Test at extremes (1000x bigger/smaller, instant/year-long) to expose fundamental truths.
|
|
66
|
+
|
|
67
|
+
**Key insight:** What works at one scale fails at another.
|
|
68
|
+
|
|
69
|
+
**Red flag:** "Should scale fine" (without testing)
|
|
70
|
+
|
|
71
|
+
## Application Process
|
|
72
|
+
|
|
73
|
+
1. **Identify stuck-type** - Match symptom to technique above
|
|
74
|
+
2. **Load detailed reference** - Read specific technique from `references/`
|
|
75
|
+
3. **Apply systematically** - Follow technique's process
|
|
76
|
+
4. **Document insights** - Record what worked/failed
|
|
77
|
+
5. **Combine if needed** - Some problems need multiple techniques
|
|
78
|
+
|
|
79
|
+
## Combining Techniques
|
|
80
|
+
|
|
81
|
+
Powerful combinations:
|
|
82
|
+
- **Simplification + Meta-pattern** - Find pattern, then simplify all instances
|
|
83
|
+
- **Collision + Inversion** - Force metaphor, then invert its assumptions
|
|
84
|
+
- **Scale + Simplification** - Extremes reveal what to eliminate
|
|
85
|
+
- **Meta-pattern + Scale** - Universal patterns tested at extremes
|
|
86
|
+
|
|
87
|
+
## References
|
|
88
|
+
|
|
89
|
+
Load detailed guides as needed:
|
|
90
|
+
- `references/when-stuck.md` - Dispatch flowchart and decision tree
|
|
91
|
+
- `references/simplification-cascades.md` - Cascade detection and extraction
|
|
92
|
+
- `references/collision-zone-thinking.md` - Metaphor collision process
|
|
93
|
+
- `references/meta-pattern-recognition.md` - Pattern abstraction techniques
|
|
94
|
+
- `references/inversion-exercise.md` - Assumption flipping methodology
|
|
95
|
+
- `references/scale-game.md` - Extreme testing procedures
|
|
96
|
+
- `references/attribution.md` - Source and adaptation notes
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Problem-Solving Skills - Attribution
|
|
2
|
+
|
|
3
|
+
These skills were derived from agent patterns in the Microsoft Amplifier project.
|
|
4
|
+
|
|
5
|
+
## Source Repository
|
|
6
|
+
|
|
7
|
+
- **Name:** Amplifier
|
|
8
|
+
- **URL:** https://github.com/microsoft/amplifier
|
|
9
|
+
- **Commit:** 2adb63f858e7d760e188197c8e8d4c1ef721e2a6
|
|
10
|
+
- **Date:** 2025-10-10
|
|
11
|
+
|
|
12
|
+
## Skills Derived from Amplifier Agents
|
|
13
|
+
|
|
14
|
+
### From insight-synthesizer agent:
|
|
15
|
+
- **simplification-cascades** - Finding insights that eliminate multiple components
|
|
16
|
+
- **collision-zone-thinking** - Forcing unrelated concepts together for breakthroughs
|
|
17
|
+
- **meta-pattern-recognition** - Spotting patterns across 3+ domains
|
|
18
|
+
- **inversion-exercise** - Flipping assumptions to reveal alternatives
|
|
19
|
+
- **scale-game** - Testing at extremes to expose fundamental truths
|
|
20
|
+
|
|
21
|
+
### From ambiguity-guardian agent:
|
|
22
|
+
- **preserving-productive-tensions** - Preserving multiple valid approaches (in architecture skill)
|
|
23
|
+
|
|
24
|
+
### From knowledge-archaeologist agent:
|
|
25
|
+
- **tracing-knowledge-lineages** - Understanding how ideas evolved (in research skill)
|
|
26
|
+
|
|
27
|
+
### Dispatch pattern:
|
|
28
|
+
- **when-stuck** - Maps stuck-symptoms to appropriate technique
|
|
29
|
+
|
|
30
|
+
## What Was Adapted
|
|
31
|
+
|
|
32
|
+
The Amplifier agents are specialized long-lived agents with structured JSON output. These skills extract the core problem-solving techniques and adapt them as:
|
|
33
|
+
|
|
34
|
+
- **Scannable quick-reference guides** (~60-80 lines each)
|
|
35
|
+
- **Symptom-based discovery** via when_to_use descriptions
|
|
36
|
+
- **Immediate application** without special tooling
|
|
37
|
+
- **Composable patterns** through dispatch system
|
|
38
|
+
- **Progressive disclosure** via SKILL.md + references structure
|
|
39
|
+
|
|
40
|
+
## Core Insight
|
|
41
|
+
|
|
42
|
+
Agent capabilities are domain-agnostic patterns. Whether packaged as "amplifier agent" or "problem-solving skill", the underlying technique is the same.
|
|
43
|
+
|
|
44
|
+
We extracted the techniques and made them:
|
|
45
|
+
- Portable across contexts
|
|
46
|
+
- Immediately applicable
|
|
47
|
+
- Token-efficient through progressive disclosure
|
|
48
|
+
- Discoverable through symptom-matching
|
|
49
|
+
- Combinable for complex problems
|
|
50
|
+
|
|
51
|
+
## License
|
|
52
|
+
|
|
53
|
+
Original Amplifier project uses MIT License. These adapted skills maintain attribution and follow the same open spirit.
|
|
54
|
+
|
|
55
|
+
## Adaptation Notes
|
|
56
|
+
|
|
57
|
+
**Changes from original:**
|
|
58
|
+
- Converted from long-lived agent to scannable reference
|
|
59
|
+
- Added symptom-based dispatch system
|
|
60
|
+
- Removed JSON output requirements
|
|
61
|
+
- Focused on immediate application
|
|
62
|
+
- Added concrete examples
|
|
63
|
+
- Structured for progressive disclosure
|
|
64
|
+
|
|
65
|
+
**Preserved from original:**
|
|
66
|
+
- Core problem-solving techniques
|
|
67
|
+
- Recognition patterns
|
|
68
|
+
- Application processes
|
|
69
|
+
- Fundamental insights
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Collision-Zone Thinking
|
|
2
|
+
|
|
3
|
+
Force unrelated concepts together to discover emergent properties. "What if we treated X like Y?"
|
|
4
|
+
|
|
5
|
+
## Core Principle
|
|
6
|
+
|
|
7
|
+
Revolutionary insights from deliberate metaphor-mixing. Treat X like Y and see what emerges.
|
|
8
|
+
|
|
9
|
+
## When to Use
|
|
10
|
+
|
|
11
|
+
| Symptom | Action |
|
|
12
|
+
|---------|--------|
|
|
13
|
+
| Stuck in conventional thinking | Force wild domain collision |
|
|
14
|
+
| Solutions feel incremental | Need breakthrough, not optimization |
|
|
15
|
+
| "Tried everything in this domain" | Import concepts from elsewhere |
|
|
16
|
+
| Need innovation, not iteration | Deliberately mix unrelated ideas |
|
|
17
|
+
|
|
18
|
+
## Quick Reference Collisions
|
|
19
|
+
|
|
20
|
+
| Treat This | Like This | Discovers |
|
|
21
|
+
|------------|-----------|-----------|
|
|
22
|
+
| Code organization | DNA/genetics | Mutation testing, evolutionary algorithms |
|
|
23
|
+
| Service architecture | Lego bricks | Composable microservices, plug-and-play |
|
|
24
|
+
| Data management | Water flow | Streaming, data lakes, flow-based systems |
|
|
25
|
+
| Request handling | Postal mail | Message queues, async processing |
|
|
26
|
+
| Error handling | Circuit breakers | Fault isolation, graceful degradation |
|
|
27
|
+
|
|
28
|
+
## Process
|
|
29
|
+
|
|
30
|
+
1. **Pick two unrelated concepts** from different domains
|
|
31
|
+
2. **Force combination** - "What if we treated [A] like [B]?"
|
|
32
|
+
3. **Explore emergent properties** - What new capabilities appear?
|
|
33
|
+
4. **Test boundaries** - Where does the metaphor break?
|
|
34
|
+
5. **Extract insight** - What did we learn?
|
|
35
|
+
|
|
36
|
+
## Detailed Example
|
|
37
|
+
|
|
38
|
+
**Problem:** Complex distributed system with cascading failures
|
|
39
|
+
|
|
40
|
+
**Collision:** "What if we treated services like electrical circuits?"
|
|
41
|
+
|
|
42
|
+
**Emergent properties:**
|
|
43
|
+
- Circuit breakers (disconnect on overload)
|
|
44
|
+
- Fuses (one-time failure protection)
|
|
45
|
+
- Ground faults (error isolation)
|
|
46
|
+
- Load balancing (current distribution)
|
|
47
|
+
- Voltage regulation (rate limiting)
|
|
48
|
+
|
|
49
|
+
**Where it works:** Preventing cascade failures, fault isolation
|
|
50
|
+
|
|
51
|
+
**Where it breaks:** Circuits don't have retry logic, healing mechanisms
|
|
52
|
+
|
|
53
|
+
**Insight gained:** Failure isolation patterns from electrical engineering
|
|
54
|
+
|
|
55
|
+
## Best Source Domains
|
|
56
|
+
|
|
57
|
+
Rich domains for concept mining:
|
|
58
|
+
- **Physics** - Forces, thermodynamics, relativity
|
|
59
|
+
- **Biology** - Evolution, ecosystems, immune systems
|
|
60
|
+
- **Economics** - Markets, incentives, game theory
|
|
61
|
+
- **Psychology** - Cognition, behavior, motivation
|
|
62
|
+
- **Architecture** - Structure, flow, space utilization
|
|
63
|
+
|
|
64
|
+
## Red Flags
|
|
65
|
+
|
|
66
|
+
You need collision-zone thinking when:
|
|
67
|
+
- "I've tried everything in this domain"
|
|
68
|
+
- Solutions feel incremental, not breakthrough
|
|
69
|
+
- Stuck in conventional thinking
|
|
70
|
+
- Need innovation, not optimization
|
|
71
|
+
- "Standard approach isn't working"
|
|
72
|
+
|
|
73
|
+
## Remember
|
|
74
|
+
|
|
75
|
+
- Wild combinations often yield best insights
|
|
76
|
+
- Test metaphor boundaries rigorously
|
|
77
|
+
- Document even failed collisions (they teach)
|
|
78
|
+
- Breakthrough > incremental improvement
|
|
79
|
+
- Question: "What would [domain expert] do?"
|