opencodekit 0.18.1 → 0.18.3
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/index.js +161 -38
- package/dist/template/.opencode/.version +1 -1
- package/dist/template/.opencode/AGENTS.md +39 -9
- package/dist/template/.opencode/AGENT_ALIGNMENT.md +6 -6
- package/dist/template/.opencode/agent/build.md +7 -103
- package/dist/template/.opencode/agent/general.md +0 -52
- package/dist/template/.opencode/agent/plan.md +10 -0
- package/dist/template/.opencode/agent/runner.md +79 -0
- package/dist/template/.opencode/command/create.md +13 -1
- package/dist/template/.opencode/command/init-context.md +20 -6
- package/dist/template/.opencode/command/init-user.md +18 -16
- package/dist/template/.opencode/command/lfg.md +3 -4
- package/dist/template/.opencode/command/ship.md +6 -48
- package/dist/template/.opencode/command/start.md +20 -3
- package/dist/template/.opencode/command/verify.md +12 -17
- package/dist/template/.opencode/context/README.md +29 -0
- package/dist/template/.opencode/memory/_templates/{STATE.md → state.md} +1 -1
- package/dist/template/.opencode/memory.db +0 -0
- package/dist/template/.opencode/memory.db-shm +0 -0
- package/dist/template/.opencode/memory.db-wal +0 -0
- package/dist/template/.opencode/opencode.json +131 -7
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/plugin/lib/memory-helpers.ts +51 -16
- package/dist/template/.opencode/plugin/lib/memory-hooks.ts +1 -1
- package/dist/template/.opencode/skill/accessibility-audit/SKILL.md +11 -5
- package/dist/template/.opencode/skill/agent-browser/SKILL.md +55 -18
- package/dist/template/.opencode/skill/agent-teams/SKILL.md +12 -1
- package/dist/template/.opencode/skill/augment-context-engine/SKILL.md +11 -1
- package/dist/template/.opencode/skill/beads/SKILL.md +57 -390
- package/dist/template/.opencode/skill/beads/references/BEST_PRACTICES.md +27 -0
- package/dist/template/.opencode/skill/beads/references/EXAMPLES.md +45 -0
- package/dist/template/.opencode/skill/beads/references/FILE_CLAIMING.md +101 -0
- package/dist/template/.opencode/skill/beads/references/GIT_SYNC.md +25 -0
- package/dist/template/.opencode/skill/beads/references/HIERARCHY.md +71 -0
- package/dist/template/.opencode/skill/beads/references/MULTI_AGENT.md +40 -0
- package/dist/template/.opencode/skill/beads/references/SESSION_PROTOCOL.md +61 -0
- package/dist/template/.opencode/skill/beads/references/TASK_CREATION.md +38 -0
- package/dist/template/.opencode/skill/beads/references/TROUBLESHOOTING.md +38 -0
- package/dist/template/.opencode/skill/beads-bridge/SKILL.md +10 -10
- package/dist/template/.opencode/skill/brainstorming/SKILL.md +13 -0
- package/dist/template/.opencode/skill/chrome-devtools/SKILL.md +11 -1
- package/dist/template/.opencode/skill/cloudflare/SKILL.md +87 -67
- package/dist/template/.opencode/skill/compaction/SKILL.md +11 -3
- package/dist/template/.opencode/skill/condition-based-waiting/SKILL.md +11 -25
- package/dist/template/.opencode/skill/context-engineering/SKILL.md +13 -2
- package/dist/template/.opencode/skill/context-initialization/SKILL.md +11 -1
- package/dist/template/.opencode/skill/context-management/SKILL.md +13 -1
- package/dist/template/.opencode/skill/core-data-expert/SKILL.md +13 -2
- package/dist/template/.opencode/skill/deep-research/SKILL.md +5 -8
- package/dist/template/.opencode/skill/defense-in-depth/SKILL.md +13 -0
- package/dist/template/.opencode/skill/design-system-audit/SKILL.md +9 -3
- package/dist/template/.opencode/skill/development-lifecycle/SKILL.md +51 -0
- package/dist/template/.opencode/skill/dispatching-parallel-agents/SKILL.md +19 -30
- package/dist/template/.opencode/skill/executing-plans/SKILL.md +36 -0
- package/dist/template/.opencode/skill/figma/SKILL.md +11 -1
- package/dist/template/.opencode/skill/finishing-a-development-branch/SKILL.md +31 -0
- package/dist/template/.opencode/skill/frontend-design/SKILL.md +13 -3
- package/dist/template/.opencode/skill/gemini-large-context/SKILL.md +11 -0
- package/dist/template/.opencode/skill/index-knowledge/SKILL.md +11 -1
- package/dist/template/.opencode/skill/jira/SKILL.md +11 -1
- package/dist/template/.opencode/skill/memory-system/SKILL.md +13 -1
- package/dist/template/.opencode/skill/mockup-to-code/SKILL.md +9 -3
- package/dist/template/.opencode/skill/mqdh/SKILL.md +11 -1
- package/dist/template/.opencode/skill/obsidian/SKILL.md +11 -1
- package/dist/template/.opencode/skill/opensrc/SKILL.md +18 -6
- package/dist/template/.opencode/skill/pdf-extract/SKILL.md +11 -1
- package/dist/template/.opencode/skill/playwright/SKILL.md +11 -1
- package/dist/template/.opencode/skill/playwriter/SKILL.md +11 -1
- package/dist/template/.opencode/skill/polar/SKILL.md +11 -1
- package/dist/template/.opencode/skill/prd/SKILL.md +13 -4
- package/dist/template/.opencode/skill/prd-task/SKILL.md +13 -3
- package/dist/template/.opencode/skill/ralph/SKILL.md +4 -8
- package/dist/template/.opencode/skill/react-best-practices/SKILL.md +24 -16
- package/dist/template/.opencode/skill/receiving-code-review/SKILL.md +22 -0
- package/dist/template/.opencode/skill/requesting-code-review/SKILL.md +30 -2
- package/dist/template/.opencode/skill/resend/SKILL.md +11 -1
- package/dist/template/.opencode/skill/root-cause-tracing/SKILL.md +12 -23
- package/dist/template/.opencode/skill/session-management/SKILL.md +11 -1
- package/dist/template/.opencode/skill/sharing-skills/SKILL.md +11 -0
- package/dist/template/.opencode/skill/skill-creator/SKILL.md +12 -11
- package/dist/template/.opencode/skill/source-code-research/SKILL.md +20 -266
- package/dist/template/.opencode/skill/source-code-research/references/analysis-tips.md +43 -0
- package/dist/template/.opencode/skill/source-code-research/references/anti-patterns.md +36 -0
- package/dist/template/.opencode/skill/source-code-research/references/common-patterns.md +57 -0
- package/dist/template/.opencode/skill/source-code-research/references/example-workflow.md +60 -0
- package/dist/template/.opencode/skill/source-code-research/references/further-reading.md +5 -0
- package/dist/template/.opencode/skill/source-code-research/references/source-structure.md +45 -0
- package/dist/template/.opencode/skill/stitch/SKILL.md +11 -1
- package/dist/template/.opencode/skill/structured-edit/SKILL.md +13 -0
- package/dist/template/.opencode/skill/subagent-driven-development/SKILL.md +13 -14
- package/dist/template/.opencode/skill/supabase/SKILL.md +11 -1
- package/dist/template/.opencode/skill/supabase-postgres-best-practices/SKILL.md +23 -15
- package/dist/template/.opencode/skill/swarm-coordination/SKILL.md +23 -923
- package/dist/template/.opencode/skill/swarm-coordination/references/architecture.md +39 -0
- package/dist/template/.opencode/skill/swarm-coordination/references/delegation-worker-protocol.md +145 -0
- package/dist/template/.opencode/skill/swarm-coordination/references/dependency-graph.md +50 -0
- package/dist/template/.opencode/skill/swarm-coordination/references/drift-check.md +90 -0
- package/dist/template/.opencode/skill/swarm-coordination/references/integration-beads.md +20 -0
- package/dist/template/.opencode/skill/swarm-coordination/references/launch-flow.md +186 -0
- package/dist/template/.opencode/skill/swarm-coordination/references/reconciler.md +172 -0
- package/dist/template/.opencode/skill/swarm-coordination/references/tier-enforcement.md +78 -0
- package/dist/template/.opencode/skill/swarm-coordination/references/tmux-integration.md +134 -0
- package/dist/template/.opencode/skill/swift-concurrency/SKILL.md +22 -2
- package/dist/template/.opencode/skill/swiftui-expert-skill/SKILL.md +58 -19
- package/dist/template/.opencode/skill/systematic-debugging/SKILL.md +25 -25
- package/dist/template/.opencode/skill/test-driven-development/SKILL.md +19 -15
- package/dist/template/.opencode/skill/testing-anti-patterns/SKILL.md +13 -0
- package/dist/template/.opencode/skill/testing-skills-with-subagents/SKILL.md +13 -15
- package/dist/template/.opencode/skill/tool-priority/SKILL.md +13 -0
- package/dist/template/.opencode/skill/ui-ux-research/SKILL.md +9 -3
- package/dist/template/.opencode/skill/using-git-worktrees/SKILL.md +37 -0
- package/dist/template/.opencode/skill/using-skills/SKILL.md +13 -0
- package/dist/template/.opencode/skill/v0/SKILL.md +11 -1
- package/dist/template/.opencode/skill/v1-run/SKILL.md +11 -1
- package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +14 -2
- package/dist/template/.opencode/skill/verification-before-completion/SKILL.md +22 -0
- package/dist/template/.opencode/skill/verification-before-completion/references/VERIFICATION_PROTOCOL.md +67 -0
- package/dist/template/.opencode/skill/visual-analysis/SKILL.md +9 -3
- package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +12 -5
- package/dist/template/.opencode/skill/writing-plans/SKILL.md +13 -0
- package/dist/template/.opencode/skill/writing-skills/SKILL.md +26 -421
- package/dist/template/.opencode/skill/writing-skills/references/anti-patterns.md +25 -0
- package/dist/template/.opencode/skill/writing-skills/references/claude-search-optimization.md +140 -0
- package/dist/template/.opencode/skill/writing-skills/references/discovery-workflow.md +11 -0
- package/dist/template/.opencode/skill/writing-skills/references/file-organization.md +32 -0
- package/dist/template/.opencode/skill/writing-skills/references/flowcharts-and-examples.md +57 -0
- package/dist/template/.opencode/skill/writing-skills/references/rationalization-hardening.md +75 -0
- package/dist/template/.opencode/skill/writing-skills/references/testing-skill-types.md +52 -0
- package/package.json +15 -4
- /package/dist/template/.opencode/memory/_templates/{PROJECT.md → project.md} +0 -0
- /package/dist/template/.opencode/memory/_templates/{ROADMAP.md → roadmap.md} +0 -0
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: swiftui-expert-skill
|
|
3
3
|
description: Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, modern APIs, Swift concurrency, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [apple, ui]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# SwiftUI Expert Skill
|
|
7
10
|
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- When building, reviewing, or refactoring SwiftUI code with modern APIs and best practices.
|
|
14
|
+
|
|
15
|
+
## When NOT to Use
|
|
16
|
+
|
|
17
|
+
- When the task does not involve SwiftUI (e.g., UIKit-only or non-Apple platforms).
|
|
18
|
+
|
|
8
19
|
## Overview
|
|
20
|
+
|
|
9
21
|
Use this skill to build, review, or improve SwiftUI features with correct state management, modern API usage, Swift concurrency best practices, optimal view composition, and iOS 26+ Liquid Glass styling. Prioritize native APIs, Apple design guidance, and performance-conscious patterns. This skill focuses on facts and best practices without enforcing specific architectural patterns.
|
|
10
22
|
|
|
11
23
|
## Workflow Decision Tree
|
|
12
24
|
|
|
13
25
|
### 1) Review existing SwiftUI code
|
|
26
|
+
|
|
14
27
|
- Check property wrapper usage against the selection guide (see `references/state-management.md`)
|
|
15
28
|
- Verify modern API usage (see `references/modern-apis.md`)
|
|
16
29
|
- Verify view composition follows extraction rules (see `references/view-structure.md`)
|
|
@@ -21,6 +34,7 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
21
34
|
- Validate iOS 26+ availability handling with sensible fallbacks
|
|
22
35
|
|
|
23
36
|
### 2) Improve existing SwiftUI code
|
|
37
|
+
|
|
24
38
|
- Audit state management for correct wrapper selection (prefer `@Observable` over `ObservableObject`)
|
|
25
39
|
- Replace deprecated APIs with modern equivalents (see `references/modern-apis.md`)
|
|
26
40
|
- Extract complex views into separate subviews (see `references/view-structure.md`)
|
|
@@ -31,6 +45,7 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
31
45
|
- Adopt Liquid Glass only when explicitly requested by the user
|
|
32
46
|
|
|
33
47
|
### 3) Implement new SwiftUI feature
|
|
48
|
+
|
|
34
49
|
- Design data flow first: identify owned vs injected state (see `references/state-management.md`)
|
|
35
50
|
- Use modern APIs (no deprecated modifiers or patterns, see `references/modern-apis.md`)
|
|
36
51
|
- Use `@Observable` for shared state (with `@MainActor` if not using default actor isolation)
|
|
@@ -43,6 +58,7 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
43
58
|
## Core Guidelines
|
|
44
59
|
|
|
45
60
|
### State Management
|
|
61
|
+
|
|
46
62
|
- **Always prefer `@Observable` over `ObservableObject`** for new code
|
|
47
63
|
- **Mark `@Observable` classes with `@MainActor`** unless using default actor isolation
|
|
48
64
|
- **Always mark `@State` and `@StateObject` as `private`** (makes dependencies clear)
|
|
@@ -55,6 +71,7 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
55
71
|
- Nested `ObservableObject` doesn't work (pass nested objects directly); `@Observable` handles nesting fine
|
|
56
72
|
|
|
57
73
|
### Modern APIs
|
|
74
|
+
|
|
58
75
|
- Use `foregroundStyle()` instead of `foregroundColor()`
|
|
59
76
|
- Use `clipShape(.rect(cornerRadius:))` instead of `cornerRadius()`
|
|
60
77
|
- Use `Tab` API instead of `tabItem()`
|
|
@@ -70,6 +87,7 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
70
87
|
- Avoid `GeometryReader` when alternatives exist (e.g., `containerRelativeFrame()`)
|
|
71
88
|
|
|
72
89
|
### Swift Best Practices
|
|
90
|
+
|
|
73
91
|
- Use modern Text formatting (`.format` parameters, not `String(format:)`)
|
|
74
92
|
- Use `localizedStandardContains()` for user-input filtering (not `contains()`)
|
|
75
93
|
- Prefer static member lookup (`.blue` vs `Color.blue`)
|
|
@@ -77,6 +95,7 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
77
95
|
- Use `.task(id:)` for value-dependent tasks
|
|
78
96
|
|
|
79
97
|
### View Composition
|
|
98
|
+
|
|
80
99
|
- **Prefer modifiers over conditional views** for state changes (maintains view identity)
|
|
81
100
|
- Extract complex views into separate subviews for better readability and performance
|
|
82
101
|
- Keep views small for optimal performance
|
|
@@ -89,6 +108,7 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
89
108
|
- Views should work in any context (don't assume screen size or presentation style)
|
|
90
109
|
|
|
91
110
|
### Performance
|
|
111
|
+
|
|
92
112
|
- Pass only needed values to views (avoid large "config" or "context" objects)
|
|
93
113
|
- Eliminate unnecessary dependencies to reduce update fan-out
|
|
94
114
|
- Check for value changes before assigning state in hot paths
|
|
@@ -106,6 +126,7 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
106
126
|
- Use `Self._printChanges()` to debug unexpected view updates
|
|
107
127
|
|
|
108
128
|
### Animations
|
|
129
|
+
|
|
109
130
|
- Use `.animation(_:value:)` with value parameter (deprecated version without value is too broad)
|
|
110
131
|
- Use `withAnimation` for event-driven animations (button taps, gestures)
|
|
111
132
|
- Prefer transforms (`offset`, `scale`, `rotation`) over layout changes (`frame`) for performance
|
|
@@ -117,7 +138,9 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
117
138
|
- Implicit animations override explicit animations (later in view tree wins)
|
|
118
139
|
|
|
119
140
|
### Liquid Glass (iOS 26+)
|
|
141
|
+
|
|
120
142
|
**Only adopt when explicitly requested by the user.**
|
|
143
|
+
|
|
121
144
|
- Use native `glassEffect`, `GlassEffectContainer`, and glass button styles
|
|
122
145
|
- Wrap multiple glass elements in `GlassEffectContainer`
|
|
123
146
|
- Apply `.glassEffect()` after layout and visual modifiers
|
|
@@ -127,13 +150,14 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
127
150
|
## Quick Reference
|
|
128
151
|
|
|
129
152
|
### Property Wrapper Selection (Modern)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
|
133
|
-
| `@
|
|
134
|
-
| `@
|
|
135
|
-
| `
|
|
136
|
-
| `
|
|
153
|
+
|
|
154
|
+
| Wrapper | Use When |
|
|
155
|
+
| ----------- | --------------------------------------------------------------------- |
|
|
156
|
+
| `@State` | Internal view state (must be `private`), or owned `@Observable` class |
|
|
157
|
+
| `@Binding` | Child modifies parent's state |
|
|
158
|
+
| `@Bindable` | Injected `@Observable` needing bindings |
|
|
159
|
+
| `let` | Read-only value from parent |
|
|
160
|
+
| `var` | Read-only value watched via `.onChange()` |
|
|
137
161
|
|
|
138
162
|
**Legacy (Pre-iOS 17):**
|
|
139
163
|
| Wrapper | Use When |
|
|
@@ -142,21 +166,23 @@ Use this skill to build, review, or improve SwiftUI features with correct state
|
|
|
142
166
|
| `@ObservedObject` | View receives an `ObservableObject` |
|
|
143
167
|
|
|
144
168
|
### Modern API Replacements
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
153
|
-
| `
|
|
154
|
-
| `
|
|
155
|
-
| `
|
|
169
|
+
|
|
170
|
+
| Deprecated | Modern Alternative |
|
|
171
|
+
| ------------------------------- | ------------------------------------------------------------ |
|
|
172
|
+
| `foregroundColor()` | `foregroundStyle()` |
|
|
173
|
+
| `cornerRadius()` | `clipShape(.rect(cornerRadius:))` |
|
|
174
|
+
| `tabItem()` | `Tab` API |
|
|
175
|
+
| `onTapGesture()` | `Button` (unless need location/count) |
|
|
176
|
+
| `NavigationView` | `NavigationStack` |
|
|
177
|
+
| `onChange(of:) { value in }` | `onChange(of:) { old, new in }` or `onChange(of:) { }` |
|
|
178
|
+
| `fontWeight(.bold)` | `bold()` |
|
|
179
|
+
| `GeometryReader` | `containerRelativeFrame()` or `visualEffect()` |
|
|
180
|
+
| `showsIndicators: false` | `.scrollIndicators(.hidden)` |
|
|
156
181
|
| `String(format: "%.2f", value)` | `Text(value, format: .number.precision(.fractionLength(2)))` |
|
|
157
|
-
| `string.contains(search)`
|
|
182
|
+
| `string.contains(search)` | `string.localizedStandardContains(search)` (for user input) |
|
|
158
183
|
|
|
159
184
|
### Liquid Glass Patterns
|
|
185
|
+
|
|
160
186
|
```swift
|
|
161
187
|
// Basic glass effect with fallback
|
|
162
188
|
if #available(iOS 26, *) {
|
|
@@ -185,6 +211,7 @@ Button("Confirm") { }
|
|
|
185
211
|
## Review Checklist
|
|
186
212
|
|
|
187
213
|
### State Management
|
|
214
|
+
|
|
188
215
|
- [ ] Using `@Observable` instead of `ObservableObject` for new code
|
|
189
216
|
- [ ] `@Observable` classes marked with `@MainActor` (if needed)
|
|
190
217
|
- [ ] Using `@State` with `@Observable` classes (not `@StateObject`)
|
|
@@ -195,6 +222,7 @@ Button("Confirm") { }
|
|
|
195
222
|
- [ ] Nested `ObservableObject` avoided (or passed directly to child views)
|
|
196
223
|
|
|
197
224
|
### Modern APIs (see `references/modern-apis.md`)
|
|
225
|
+
|
|
198
226
|
- [ ] Using `foregroundStyle()` instead of `foregroundColor()`
|
|
199
227
|
- [ ] Using `clipShape(.rect(cornerRadius:))` instead of `cornerRadius()`
|
|
200
228
|
- [ ] Using `Tab` API instead of `tabItem()`
|
|
@@ -205,25 +233,30 @@ Button("Confirm") { }
|
|
|
205
233
|
- [ ] Button images include text labels for accessibility
|
|
206
234
|
|
|
207
235
|
### Sheets & Navigation (see `references/sheet-navigation-patterns.md`)
|
|
236
|
+
|
|
208
237
|
- [ ] Using `.sheet(item:)` for model-based sheets
|
|
209
238
|
- [ ] Sheets own their actions and dismiss internally
|
|
210
239
|
- [ ] Using `navigationDestination(for:)` for type-safe navigation
|
|
211
240
|
|
|
212
241
|
### ScrollView (see `references/scroll-patterns.md`)
|
|
242
|
+
|
|
213
243
|
- [ ] Using `ScrollViewReader` with stable IDs for programmatic scrolling
|
|
214
244
|
- [ ] Using `.scrollIndicators(.hidden)` instead of initializer parameter
|
|
215
245
|
|
|
216
246
|
### Text & Formatting (see `references/text-formatting.md`)
|
|
247
|
+
|
|
217
248
|
- [ ] Using modern Text formatting (not `String(format:)`)
|
|
218
249
|
- [ ] Using `localizedStandardContains()` for search filtering
|
|
219
250
|
|
|
220
251
|
### View Structure (see `references/view-structure.md`)
|
|
252
|
+
|
|
221
253
|
- [ ] Using modifiers instead of conditionals for state changes
|
|
222
254
|
- [ ] Complex views extracted to separate subviews
|
|
223
255
|
- [ ] Views kept small for performance
|
|
224
256
|
- [ ] Container views use `@ViewBuilder let content: Content`
|
|
225
257
|
|
|
226
258
|
### Performance (see `references/performance-patterns.md`)
|
|
259
|
+
|
|
227
260
|
- [ ] View `body` kept simple and pure (no side effects)
|
|
228
261
|
- [ ] Passing only needed values (not large config objects)
|
|
229
262
|
- [ ] Eliminating unnecessary dependencies
|
|
@@ -233,12 +266,14 @@ Button("Confirm") { }
|
|
|
233
266
|
- [ ] Heavy computation moved out of `body`
|
|
234
267
|
|
|
235
268
|
### List Patterns (see `references/list-patterns.md`)
|
|
269
|
+
|
|
236
270
|
- [ ] ForEach uses stable identity (not `.indices`)
|
|
237
271
|
- [ ] Constant number of views per ForEach element
|
|
238
272
|
- [ ] No inline filtering in ForEach
|
|
239
273
|
- [ ] No `AnyView` in list rows
|
|
240
274
|
|
|
241
275
|
### Layout (see `references/layout-best-practices.md`)
|
|
276
|
+
|
|
242
277
|
- [ ] Avoiding layout thrash (deep hierarchies, excessive GeometryReader)
|
|
243
278
|
- [ ] Gating frequent geometry updates by thresholds
|
|
244
279
|
- [ ] Business logic separated into testable models
|
|
@@ -247,6 +282,7 @@ Button("Confirm") { }
|
|
|
247
282
|
- [ ] Views work in any context (context-agnostic)
|
|
248
283
|
|
|
249
284
|
### Animations (see `references/animation-basics.md`, `references/animation-transitions.md`, `references/animation-advanced.md`)
|
|
285
|
+
|
|
250
286
|
- [ ] Using `.animation(_:value:)` with value parameter
|
|
251
287
|
- [ ] Using `withAnimation` for event-driven animations
|
|
252
288
|
- [ ] Transitions paired with animations outside conditional structure
|
|
@@ -257,6 +293,7 @@ Button("Confirm") { }
|
|
|
257
293
|
- [ ] Completion handlers use `.transaction(value:)` for reexecution
|
|
258
294
|
|
|
259
295
|
### Liquid Glass (iOS 26+)
|
|
296
|
+
|
|
260
297
|
- [ ] `#available(iOS 26, *)` with fallback for Liquid Glass
|
|
261
298
|
- [ ] Multiple glass views wrapped in `GlassEffectContainer`
|
|
262
299
|
- [ ] `.glassEffect()` applied after layout/appearance modifiers
|
|
@@ -264,6 +301,7 @@ Button("Confirm") { }
|
|
|
264
301
|
- [ ] Shapes and tints consistent across related elements
|
|
265
302
|
|
|
266
303
|
## References
|
|
304
|
+
|
|
267
305
|
- `references/state-management.md` - Property wrappers and data flow (prefer `@Observable`)
|
|
268
306
|
- `references/view-structure.md` - View composition, extraction, and container patterns
|
|
269
307
|
- `references/performance-patterns.md` - Performance optimization techniques and anti-patterns
|
|
@@ -282,6 +320,7 @@ Button("Confirm") { }
|
|
|
282
320
|
## Philosophy
|
|
283
321
|
|
|
284
322
|
This skill focuses on **facts and best practices**, not architectural opinions:
|
|
323
|
+
|
|
285
324
|
- We don't enforce specific architectures (e.g., MVVM, VIPER)
|
|
286
325
|
- We do encourage separating business logic for testability
|
|
287
326
|
- We prioritize modern APIs over deprecated ones
|
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: systematic-debugging
|
|
3
3
|
description: Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes - four-phase framework (root cause investigation, pattern analysis, hypothesis testing, implementation) that ensures understanding before attempting solutions
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [debugging, workflow]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Systematic Debugging
|
|
7
10
|
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- Test failures, production bugs, build breaks, or unexpected behavior
|
|
14
|
+
- Issues with unclear root cause or multiple failed fix attempts
|
|
15
|
+
- Situations where time pressure makes “quick fixes” tempting
|
|
16
|
+
|
|
17
|
+
## When NOT to Use
|
|
18
|
+
|
|
19
|
+
- Pure feature development with no failures to investigate
|
|
20
|
+
- Non-technical questions that don’t require root cause analysis
|
|
21
|
+
|
|
22
|
+
## Debugging Checklist
|
|
23
|
+
|
|
24
|
+
- [ ] Read error messages/stack traces fully
|
|
25
|
+
- [ ] Reproduce consistently (or gather more data)
|
|
26
|
+
- [ ] Check recent changes (diffs, deps, config)
|
|
27
|
+
- [ ] Trace data flow to source (use root-cause-tracing if deep)
|
|
28
|
+
- [ ] Form a single hypothesis and test minimally
|
|
29
|
+
- [ ] Create a failing test before implementing the fix
|
|
30
|
+
- [ ] Implement one change and verify it resolves the issue
|
|
31
|
+
- [ ] If 3+ fixes fail, stop and question architecture
|
|
32
|
+
|
|
8
33
|
## Overview
|
|
9
34
|
|
|
10
35
|
Random fixes waste time and create new bugs. Quick patches mask underlying issues.
|
|
@@ -21,31 +46,6 @@ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
|
|
|
21
46
|
|
|
22
47
|
If you haven't completed Phase 1, you cannot propose fixes.
|
|
23
48
|
|
|
24
|
-
## When to Use
|
|
25
|
-
|
|
26
|
-
Use for ANY technical issue:
|
|
27
|
-
|
|
28
|
-
- Test failures
|
|
29
|
-
- Bugs in production
|
|
30
|
-
- Unexpected behavior
|
|
31
|
-
- Performance problems
|
|
32
|
-
- Build failures
|
|
33
|
-
- Integration issues
|
|
34
|
-
|
|
35
|
-
**Use this ESPECIALLY when:**
|
|
36
|
-
|
|
37
|
-
- Under time pressure (emergencies make guessing tempting)
|
|
38
|
-
- "Just one quick fix" seems obvious
|
|
39
|
-
- You've already tried multiple fixes
|
|
40
|
-
- Previous fix didn't work
|
|
41
|
-
- You don't fully understand the issue
|
|
42
|
-
|
|
43
|
-
**Don't skip when:**
|
|
44
|
-
|
|
45
|
-
- Issue seems simple (simple bugs have root causes too)
|
|
46
|
-
- You're in a hurry (rushing guarantees rework)
|
|
47
|
-
- Manager wants it fixed NOW (systematic is faster than thrashing)
|
|
48
|
-
|
|
49
49
|
## The Four Phases
|
|
50
50
|
|
|
51
51
|
You MUST complete each phase before proceeding to the next.
|
|
@@ -1,34 +1,38 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: test-driven-development
|
|
3
3
|
description: Use when implementing any feature or bugfix, before writing implementation code - write the test first, watch it fail, write minimal code to pass; ensures tests actually verify behavior by requiring failure first
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [testing, workflow]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Test-Driven Development (TDD)
|
|
7
10
|
|
|
8
|
-
##
|
|
11
|
+
## When to Use
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
- Implementing new features or behavior changes
|
|
14
|
+
- Fixing bugs that should be reproducible via a failing test first
|
|
11
15
|
|
|
12
|
-
|
|
16
|
+
## When NOT to Use
|
|
13
17
|
|
|
14
|
-
|
|
18
|
+
- Throwaway prototypes or generated code where tests are out of scope
|
|
19
|
+
- Pure configuration edits with no executable behavior
|
|
15
20
|
|
|
16
|
-
##
|
|
21
|
+
## TDD Checklist
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
- [ ] Write a minimal failing test for one behavior
|
|
24
|
+
- [ ] Run tests and confirm the new test fails for the expected reason
|
|
25
|
+
- [ ] Write the minimal code to pass the test
|
|
26
|
+
- [ ] Re-run tests and confirm all pass
|
|
27
|
+
- [ ] Refactor only after green and keep tests passing
|
|
19
28
|
|
|
20
|
-
|
|
21
|
-
- Bug fixes
|
|
22
|
-
- Refactoring
|
|
23
|
-
- Behavior changes
|
|
29
|
+
## Overview
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
Write the test first. Watch it fail. Write minimal code to pass.
|
|
26
32
|
|
|
27
|
-
|
|
28
|
-
- Generated code
|
|
29
|
-
- Configuration files
|
|
33
|
+
**Core principle:** If you didn't watch the test fail, you don't know if it tests the right thing.
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
**Violating the letter of the rules is violating the spirit of the rules.**
|
|
32
36
|
|
|
33
37
|
## The Iron Law
|
|
34
38
|
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: testing-anti-patterns
|
|
3
3
|
description: Use when writing or changing tests, adding mocks, or tempted to add test-only methods to production code - prevents testing mock behavior, production pollution with test-only methods, and mocking without understanding dependencies
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [testing, code-quality]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Testing Anti-Patterns
|
|
7
10
|
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- Writing or refactoring tests that introduce mocks or test-only helpers
|
|
14
|
+
- Reviewing tests for mock misuse, incomplete mocks, or production pollution
|
|
15
|
+
|
|
16
|
+
## When NOT to Use
|
|
17
|
+
|
|
18
|
+
- Pure production code changes with no test work
|
|
19
|
+
- Simple test updates that don’t involve mocks or structure changes
|
|
20
|
+
|
|
8
21
|
## Overview
|
|
9
22
|
|
|
10
23
|
Tests must verify real behavior, not mock behavior. Mocks are a means to isolate, not the thing being tested.
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: testing-skills-with-subagents
|
|
3
3
|
description: Use when creating or editing skills, before deployment, to verify they work under pressure and resist rationalization - applies RED-GREEN-REFACTOR cycle to process documentation by running baseline without skill, writing to address failures, iterating to close loopholes
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [testing, agent-coordination]
|
|
6
|
+
dependencies: [writing-skills]
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Testing Skills With Subagents
|
|
7
10
|
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- You are creating or editing a skill and need to validate it under pressure
|
|
14
|
+
- You want to bulletproof discipline-enforcing skills against rationalization
|
|
15
|
+
|
|
16
|
+
## When NOT to Use
|
|
17
|
+
|
|
18
|
+
- Pure reference skills that don’t enforce behavior or rules
|
|
19
|
+
- Minor typo fixes where no behavioral change is introduced
|
|
20
|
+
|
|
8
21
|
## Overview
|
|
9
22
|
|
|
10
23
|
**Testing skills is just TDD applied to process documentation.**
|
|
@@ -17,21 +30,6 @@ You run scenarios without the skill (RED - watch agent fail), write skill addres
|
|
|
17
30
|
|
|
18
31
|
**Complete worked example:** See examples/CLAUDE_MD_TESTING.md for a full test campaign testing CLAUDE.md documentation variants.
|
|
19
32
|
|
|
20
|
-
## When to Use
|
|
21
|
-
|
|
22
|
-
Test skills that:
|
|
23
|
-
|
|
24
|
-
- Enforce discipline (TDD, testing requirements)
|
|
25
|
-
- Have compliance costs (time, effort, rework)
|
|
26
|
-
- Could be rationalized away ("just this once")
|
|
27
|
-
- Contradict immediate goals (speed over quality)
|
|
28
|
-
|
|
29
|
-
Don't test:
|
|
30
|
-
|
|
31
|
-
- Pure reference skills (API docs, syntax guides)
|
|
32
|
-
- Skills without rules to violate
|
|
33
|
-
- Skills agents have no incentive to bypass
|
|
34
|
-
|
|
35
33
|
## TDD Mapping for Skill Testing
|
|
36
34
|
|
|
37
35
|
| TDD Phase | Skill Testing | What You Do |
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tool-priority
|
|
3
3
|
description: Use when choosing between tools or need tool reference - covers LSP, search, swarm, memory, and research tools with correct syntax
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [workflow, context]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Tool Priority Skill
|
|
7
10
|
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- You need to decide which tool to use for a task or recall tool syntax
|
|
14
|
+
- You are about to edit code and want the correct discovery/order of operations
|
|
15
|
+
|
|
16
|
+
## When NOT to Use
|
|
17
|
+
|
|
18
|
+
- You already know the exact tool and syntax required
|
|
19
|
+
- The task is purely conceptual with no tool usage
|
|
20
|
+
|
|
8
21
|
## Priority Order
|
|
9
22
|
|
|
10
23
|
**LSP → Search → Swarm → Memory → File Operations**
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ui-ux-research
|
|
3
3
|
description: Use when analyzing UI patterns across codebases, comparing design system implementations, auditing UI consistency, or understanding existing patterns before implementation
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [design, research]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# UI/UX Research Skill
|
|
7
10
|
|
|
8
|
-
Research UI patterns, design systems, and user experience across codebases.
|
|
9
|
-
|
|
10
11
|
## When to Use
|
|
11
12
|
|
|
12
13
|
- Analyzing UI patterns across large codebases
|
|
@@ -14,6 +15,11 @@ Research UI patterns, design systems, and user experience across codebases.
|
|
|
14
15
|
- Auditing UI consistency
|
|
15
16
|
- Understanding existing patterns before implementation
|
|
16
17
|
|
|
18
|
+
## When NOT to Use
|
|
19
|
+
|
|
20
|
+
- Single-file UI changes without broader pattern investigation.
|
|
21
|
+
|
|
22
|
+
|
|
17
23
|
## Research Patterns
|
|
18
24
|
|
|
19
25
|
### Find All UI Components
|
|
@@ -121,5 +127,5 @@ Save research findings to `.opencode/memory/design/research/`
|
|
|
121
127
|
| After Research | Use Skill |
|
|
122
128
|
| --------------------------- | --------------------- |
|
|
123
129
|
| Need implementation | `mockup-to-code` |
|
|
124
|
-
| Need aesthetic improvements | `frontend-design`
|
|
130
|
+
| Need aesthetic improvements | `frontend-design` |
|
|
125
131
|
| Need accessibility fixes | `accessibility-audit` |
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: using-git-worktrees
|
|
3
3
|
description: Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [git, workflow]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Using Git Worktrees
|
|
7
10
|
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- When starting feature work that needs an isolated workspace or before executing an implementation plan.
|
|
14
|
+
|
|
15
|
+
## When NOT to Use
|
|
16
|
+
|
|
17
|
+
- When a simple change can safely be done in the current working tree or the repo does not allow worktrees.
|
|
18
|
+
|
|
8
19
|
## Overview
|
|
9
20
|
|
|
10
21
|
Git worktrees create isolated workspaces sharing the same repository, allowing work on multiple branches simultaneously without switching.
|
|
@@ -99,6 +110,32 @@ git worktree add "$path" -b "$BRANCH_NAME"
|
|
|
99
110
|
cd "$path"
|
|
100
111
|
```
|
|
101
112
|
|
|
113
|
+
## Worktree Tracking
|
|
114
|
+
|
|
115
|
+
After creating a worktree, persist its absolute path for session resume:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# After creating worktree
|
|
119
|
+
mkdir -p .beads/artifacts/$BEAD_ID
|
|
120
|
+
echo "/absolute/path/to/worktree" > .beads/artifacts/$BEAD_ID/worktree.txt
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
On session resume, restore the active worktree if tracking exists:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# Check if worktree exists for active bead
|
|
127
|
+
if [ -f .beads/artifacts/$BEAD_ID/worktree.txt ]; then
|
|
128
|
+
WORKTREE_PATH=$(cat .beads/artifacts/$BEAD_ID/worktree.txt)
|
|
129
|
+
cd "$WORKTREE_PATH"
|
|
130
|
+
fi
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
On worktree cleanup (after merge), remove the tracking file:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
rm -f .beads/artifacts/$BEAD_ID/worktree.txt
|
|
137
|
+
```
|
|
138
|
+
|
|
102
139
|
### 3. Run Project Setup
|
|
103
140
|
|
|
104
141
|
Auto-detect and run appropriate setup:
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: using-skills
|
|
3
3
|
description: Use when starting any conversation - establishes mandatory workflows for finding and using skills, including using Skill tool before announcing usage, following brainstorming before coding, and creating TodoWrite todos for checklists
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [workflow, context]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
<EXTREMELY-IMPORTANT>
|
|
@@ -13,6 +16,16 @@ This is not negotiable. This is not optional. You cannot rationalize your way ou
|
|
|
13
16
|
|
|
14
17
|
# Getting Started with Skills
|
|
15
18
|
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- At the start of any conversation or task to determine applicable skills
|
|
22
|
+
- Whenever you are about to act and need to check for mandatory workflows
|
|
23
|
+
|
|
24
|
+
## When NOT to Use
|
|
25
|
+
|
|
26
|
+
- After you already loaded the correct skill and are executing it
|
|
27
|
+
- For a task that explicitly says to follow a different skill workflow
|
|
28
|
+
|
|
16
29
|
## MANDATORY FIRST RESPONSE PROTOCOL
|
|
17
30
|
|
|
18
31
|
Before responding to ANY user message, you MUST complete this checklist:
|
|
@@ -7,11 +7,21 @@ mcp:
|
|
|
7
7
|
args: ["mcp-remote", "https://mcp.v0.dev", "--header", "Authorization: Bearer ${V0_API_KEY}"]
|
|
8
8
|
env:
|
|
9
9
|
V0_API_KEY: "${V0_API_KEY}"
|
|
10
|
+
version: 1.0.0
|
|
11
|
+
tags: [ui, mcp, design]
|
|
12
|
+
dependencies: []
|
|
10
13
|
---
|
|
11
14
|
|
|
12
15
|
# v0 AI Code Generation (MCP)
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
## When to Use
|
|
18
|
+
|
|
19
|
+
- When you need AI-generated UI components or chat-based design iteration via v0.
|
|
20
|
+
|
|
21
|
+
## When NOT to Use
|
|
22
|
+
|
|
23
|
+
- When you need to implement UI from a fixed design system without AI generation.
|
|
24
|
+
|
|
15
25
|
|
|
16
26
|
## Prerequisites
|
|
17
27
|
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: v1-run
|
|
3
3
|
description: npm package intelligence via MCP. Real-time versions, vulnerability data, health scores, and package comparisons. Use when selecting npm packages, checking for vulnerabilities, or comparing alternatives.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [integration, mcp, research]
|
|
6
|
+
dependencies: []
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# v1.run MCP
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- When you need real-time npm package health, vulnerabilities, or comparisons.
|
|
14
|
+
|
|
15
|
+
## When NOT to Use
|
|
16
|
+
|
|
17
|
+
- When package selection or security analysis is not in scope.
|
|
18
|
+
|
|
9
19
|
|
|
10
20
|
## Overview
|
|
11
21
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: vercel-deploy
|
|
2
|
+
name: vercel-deploy-claimable
|
|
3
3
|
description: Deploy applications and websites to Vercel. Use this skill when the user requests deployment actions such as "Deploy my app", "Deploy this to production", "Create a preview deployment", "Deploy and give me the link", or "Push this live". No authentication required - returns preview URL and claimable deployment link.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [devops, integration]
|
|
6
|
+
dependencies: []
|
|
4
7
|
metadata:
|
|
5
8
|
author: vercel
|
|
6
9
|
version: "1.0.0"
|
|
@@ -8,7 +11,14 @@ metadata:
|
|
|
8
11
|
|
|
9
12
|
# Vercel Deploy
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
## When to Use
|
|
15
|
+
|
|
16
|
+
- When the user requests deploying a project to Vercel and needs preview/claim links.
|
|
17
|
+
|
|
18
|
+
## When NOT to Use
|
|
19
|
+
|
|
20
|
+
- When deployment is not requested or targets a non-Vercel platform.
|
|
21
|
+
|
|
12
22
|
|
|
13
23
|
## How It Works
|
|
14
24
|
|
|
@@ -24,6 +34,7 @@ bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh [path]
|
|
|
24
34
|
```
|
|
25
35
|
|
|
26
36
|
**Arguments:**
|
|
37
|
+
|
|
27
38
|
- `path` - Directory to deploy, or a `.tgz` file (defaults to current directory)
|
|
28
39
|
|
|
29
40
|
**Examples:**
|
|
@@ -80,6 +91,7 @@ For static HTML projects (no `package.json`), framework is set to `null`.
|
|
|
80
91
|
## Static HTML Projects
|
|
81
92
|
|
|
82
93
|
For projects without a `package.json`:
|
|
94
|
+
|
|
83
95
|
- If there's a single `.html` file not named `index.html`, it gets renamed automatically
|
|
84
96
|
- This ensures the page is served at the root URL (`/`)
|
|
85
97
|
|