agent-transcript
Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.
SwiftUI performance: render, scroll, CPU/memory, updates, layout, Instruments.
$ npx -y skills add steipete/agent-scripts --skill swiftui-performance-audit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/swiftui-performance-auditContext preview
The summary Claude sees to decide when to auto-load this skill.
SwiftUI performance: render, scroll, CPU/memory, updates, layout, Instruments.
name: swiftui-performance-audit description: "SwiftUI performance: render, scroll, CPU/memory, updates, layout, Instruments."
_Attribution: copied from @Dimillian’s `Dimillian/Skills` (2025-12-31)._
Audit SwiftUI view performance end-to-end, from instrumentation and baselining to root-cause analysis and concrete remediation steps.
Collect:
Focus on:
Provide:
Explain how to collect data with Instruments:
Ask for:
Prioritize likely SwiftUI culprits:
Summarize findings with evidence from traces/logs.
Apply targeted fixes:
Look for these patterns during code review.
var body: some View {
let number = NumberFormatter() // slow allocation
let measure = MeasurementFormatter() // slow allocation
Text(measure.string(from: .init(value: meters, unit: .meters)))
}Prefer cached formatters in a model or a dedicated helper:
final class DistanceFormatter {
static let shared = DistanceFormatter()
let number = NumberFormatter()
let measure = MeasurementFormatter()
}var filtered: [Item] {
items.filter { $0.isEnabled } // runs on every body eval
}Prefer precompute or cache on change:
@State private var filtered: [Item] = [] // update filtered when inputs change
List {
ForEach(items.sorted(by: sortRule)) { item in
Row(item)
}
}Prefer sort once before view updates:
let sortedItems = items.sorted(by: sortRule)
ForEach(items.filter { $0.isEnabled }) { item in
Row(item)
}Prefer a prefiltered collection with stable identity.
ForEach(items, id: \.self) { item in
Row(item)
}Avoid `id: \.self` for non-stable values; use a stable ID.
Image(uiImage: UIImage(data: data)!)
Prefer decode/downsample off the main thread and store the result.
@Observable class Model {
var items: [Item] = []
}
var body: some View {
Row(isFavorite: model.items.contains(item))
}Prefer granular view models or per-item state to reduce update fan-out.
Ask the user to re-run the same capture and compare with baseline metrics. Summarize the delta (CPU, frame drops, memory peak) if provided.
Provide:
Add Apple documentation and WWDC resources under `references/` as they are supplied by the user.
Shared agent instructions, skills, and small portable helpers for Peter's local workspaces.
Repo: steipete/agent-scripts
Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.
Control the user's existing signed-in Chrome: callable Codex Chrome plugin first, then…
ClawSweeper status: URLs, workflow health, active workers, ops snapshot.
ClickClack ops: chat app, Cloudflare Workers deploy, DNS/docs/app, container rollout.
Cloudflare Registrar: domain availability, prices, registration via mcporter.