@olegkoval/agent-skills 1.16.0 → 1.18.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 (69) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +5 -3
  3. package/.cursor-plugin/index.json +5 -0
  4. package/.grok-plugin/index.json +120 -0
  5. package/.kiro/steering/crash-course.md +259 -0
  6. package/.windsurf/rules/crash-course.md +258 -0
  7. package/README.md +27 -3
  8. package/catalog/skills.json +83 -21
  9. package/package.json +3 -2
  10. package/packages/marketing/search-console-indexing-audit/adapters/grok/plugin.json +6 -0
  11. package/packages/marketing/search-console-indexing-audit/adapters/grok/skills/search-console-indexing-audit/SKILL.md +69 -0
  12. package/packages/marketing/search-console-indexing-audit/adapters/grok/skills/search-console-indexing-audit/scripts/summarize_gsc_coverage.py +151 -0
  13. package/packages/marketing/viral-launch/adapters/grok/plugin.json +6 -0
  14. package/packages/marketing/viral-launch/adapters/grok/skills/viral-launch/SKILL.md +105 -0
  15. package/packages/music/fill-music-player/adapters/grok/plugin.json +6 -0
  16. package/packages/music/fill-music-player/adapters/grok/skills/fill-music-player/SKILL.md +111 -0
  17. package/packages/photography/gallery/adapters/grok/plugin.json +6 -0
  18. package/packages/photography/gallery/adapters/grok/skills/gallery/SKILL.md +237 -0
  19. package/packages/software-development/apple-store-submit/adapters/grok/plugin.json +6 -0
  20. package/packages/software-development/apple-store-submit/adapters/grok/skills/apple-store-submit/SKILL.md +158 -0
  21. package/packages/software-development/cloudflare-block-countries/adapters/grok/plugin.json +6 -0
  22. package/packages/software-development/cloudflare-block-countries/adapters/grok/skills/cloudflare-block-countries/SKILL.md +177 -0
  23. package/packages/software-development/crash-course/SKILL.md +270 -0
  24. package/packages/software-development/crash-course/adapters/claude/plugin.json +5 -0
  25. package/packages/software-development/crash-course/adapters/claude/skills/crash-course/SKILL.md +271 -0
  26. package/packages/software-development/crash-course/adapters/codex/README.md +3 -0
  27. package/packages/software-development/crash-course/adapters/cursor/plugin.json +6 -0
  28. package/packages/software-development/crash-course/adapters/cursor/skills/crash-course/SKILL.md +271 -0
  29. package/packages/software-development/crash-course/adapters/grok/plugin.json +6 -0
  30. package/packages/software-development/crash-course/adapters/grok/skills/crash-course/SKILL.md +271 -0
  31. package/packages/software-development/crash-course/adapters/kiro/steering/crash-course.md +259 -0
  32. package/packages/software-development/crash-course/adapters/windsurf/rules/crash-course.md +258 -0
  33. package/packages/software-development/docs-index-keeper/adapters/grok/plugin.json +6 -0
  34. package/packages/software-development/docs-index-keeper/adapters/grok/skills/docs-index-keeper/SKILL.md +65 -0
  35. package/packages/software-development/gh-cli/adapters/grok/plugin.json +6 -0
  36. package/packages/software-development/gh-cli/adapters/grok/skills/gh-cli/SKILL.md +2200 -0
  37. package/packages/software-development/git-commit/adapters/grok/plugin.json +6 -0
  38. package/packages/software-development/git-commit/adapters/grok/skills/git-commit/SKILL.md +133 -0
  39. package/packages/software-development/macos-menubar-app/adapters/grok/plugin.json +6 -0
  40. package/packages/software-development/macos-menubar-app/adapters/grok/skills/macos-menubar-app/SKILL.md +238 -0
  41. package/packages/software-development/mvp-oneshot/adapters/grok/plugin.json +6 -0
  42. package/packages/software-development/mvp-oneshot/adapters/grok/skills/mvp-oneshot/SKILL.md +176 -0
  43. package/packages/software-development/obsidian-pr-sync/adapters/grok/plugin.json +6 -0
  44. package/packages/software-development/obsidian-pr-sync/adapters/grok/skills/obsidian-pr-sync/SKILL.md +154 -0
  45. package/packages/software-development/obsidian-task-rollover/adapters/grok/plugin.json +6 -0
  46. package/packages/software-development/obsidian-task-rollover/adapters/grok/skills/obsidian-task-rollover/SKILL.md +198 -0
  47. package/packages/software-development/open-source-publisher/adapters/grok/plugin.json +6 -0
  48. package/packages/software-development/open-source-publisher/adapters/grok/skills/open-source-publisher/SKILL.md +471 -0
  49. package/packages/software-development/product-builder/adapters/grok/plugin.json +6 -0
  50. package/packages/software-development/product-builder/adapters/grok/skills/product-builder/SKILL.md +224 -0
  51. package/packages/software-development/promptctl/adapters/grok/plugin.json +6 -0
  52. package/packages/software-development/promptctl/adapters/grok/skills/promptctl/SKILL.md +90 -0
  53. package/packages/software-development/relay/adapters/claude/plugin.json +5 -0
  54. package/packages/software-development/relay/adapters/claude/skills/relay/SKILL.md +117 -0
  55. package/packages/software-development/relay/adapters/grok/plugin.json +6 -0
  56. package/packages/software-development/relay/adapters/grok/skills/relay/SKILL.md +117 -0
  57. package/packages/software-development/review-past-performance/adapters/grok/plugin.json +6 -0
  58. package/packages/software-development/review-past-performance/adapters/grok/skills/review-past-performance/SKILL.md +212 -0
  59. package/packages/software-development/self-critique/adapters/grok/plugin.json +6 -0
  60. package/packages/software-development/self-critique/adapters/grok/skills/self-critique/SKILL.md +149 -0
  61. package/packages/software-development/self-critique/adapters/grok/skills/self-critique/scripts/critique-nudge.mjs +57 -0
  62. package/packages/software-development/semantic-release-beta/adapters/grok/plugin.json +6 -0
  63. package/packages/software-development/semantic-release-beta/adapters/grok/skills/semantic-release-beta/SKILL.md +59 -0
  64. package/packages/software-development/skill-budget-audit/adapters/grok/plugin.json +6 -0
  65. package/packages/software-development/skill-budget-audit/adapters/grok/skills/skill-budget-audit/SKILL.md +146 -0
  66. package/packages/software-development/starter-rules/adapters/grok/plugin.json +6 -0
  67. package/packages/software-development/starter-rules/adapters/grok/skills/starter-rules/SKILL.md +73 -0
  68. package/scripts/build-adapters.sh +47 -4
  69. package/scripts/validate-catalog.sh +10 -0
@@ -0,0 +1,158 @@
1
+ ---
2
+ name: apple-store-submit
3
+ description: Handle Apple App Store rejection emails end-to-end — parse rejection reasons, create a fix plan, implement code changes (privacy strings, entitlements, sandbox), navigate App Store Connect to update metadata, and resubmit. Use when an app receives a rejection or when preparing a first-time submission.
4
+ license: MIT
5
+ allowed-tools: Bash, Read, Write, Edit
6
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires Xcode, an Apple Developer account, and App Store Connect access.
7
+ metadata:
8
+ targets: [_source-only]
9
+ author: Oleg Koval
10
+ tags:
11
+ - apple
12
+ - app-store
13
+ - ios
14
+ - macos
15
+ - xcode
16
+ - submission
17
+ - rejection
18
+ ---
19
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
20
+
21
+ > 🤖 *Auto-generated by **weekly-pattern-learner** · App Store rejection handling workflow observed in FocusNotch App Store session, Jun 2026 (92 user turns covering rejection → plan → code fixes → metadata → resubmit)*
22
+
23
+ # Apple App Store Submission & Rejection Handling
24
+
25
+ ## Overview
26
+
27
+ Parse Apple rejection feedback, implement targeted fixes, update App Store Connect metadata, and resubmit — covering the complete cycle from rejection email to approved build.
28
+
29
+ ## When to Use
30
+
31
+ - Apple review team sends a rejection email
32
+ - App fails automated pre-review checks (binary rejected at upload)
33
+ - Preparing metadata for first-time submission (screenshots, keywords, privacy labels)
34
+ - Resolving App Store Connect errors before submitting for review
35
+
36
+ ## Workflow
37
+
38
+ ### 1. Parse the Rejection
39
+
40
+ Read the full rejection email. Extract and list:
41
+
42
+ - **Guideline numbers** violated (e.g., 2.1, 4.2.0, 5.1.1)
43
+ - **Code-level issues** — missing entitlements, incorrect privacy strings, sandbox violations
44
+ - **Metadata issues** — wrong screenshot sizes, subtitle policy, keyword stuffing
45
+ - **UX issues** — crashes described by reviewer, broken flows, missing functionality
46
+
47
+ Create a numbered fix plan: one item per rejection point, with the type of fix needed.
48
+
49
+ ### 2. Classify Fixes by Type
50
+
51
+ | Type | Location |
52
+ |------|----------|
53
+ | Privacy usage strings missing | `Info.plist` |
54
+ | Entitlement missing/wrong | `<AppName>.entitlements` |
55
+ | Crash or broken feature | Source code |
56
+ | Screenshots wrong size/content | App Store Connect |
57
+ | Keywords/subtitle/description | App Store Connect |
58
+ | Build number conflict | Xcode + App Store Connect |
59
+
60
+ ### 3. Implement Code Fixes
61
+
62
+ **Privacy permission strings** (`Info.plist`):
63
+
64
+ ```xml
65
+ <key>NSMicrophoneUsageDescription</key>
66
+ <string>Used for voice input during focus sessions.</string>
67
+
68
+ <key>NSCalendarsUsageDescription</key>
69
+ <string>Used to sync tasks with your calendar.</string>
70
+ ```
71
+
72
+ **Entitlements** (`<AppName>.entitlements`):
73
+
74
+ ```xml
75
+ <key>com.apple.security.app-sandbox</key>
76
+ <true/>
77
+ <key>com.apple.security.network.client</key>
78
+ <true/>
79
+ <key>com.apple.security.files.user-selected.read-write</key>
80
+ <true/>
81
+ ```
82
+
83
+ **Sandbox violations** — remove `NoEscapeBlock` patterns, replace deprecated APIs, use only sandboxed file access via Security-Scoped Bookmarks when needed.
84
+
85
+ ### 4. Build and Archive
86
+
87
+ ```bash
88
+ # Clean build
89
+ xcodebuild clean \
90
+ -scheme <AppName> \
91
+ -destination 'generic/platform=macOS'
92
+
93
+ # Archive
94
+ xcodebuild archive \
95
+ -scheme <AppName> \
96
+ -archivePath build/<AppName>.xcarchive \
97
+ -destination 'generic/platform=macOS'
98
+
99
+ # Export for App Store
100
+ xcodebuild -exportArchive \
101
+ -archivePath build/<AppName>.xcarchive \
102
+ -exportPath build/export \
103
+ -exportOptionsPlist ExportOptions.plist
104
+ ```
105
+
106
+ Validate codesigning before upload:
107
+
108
+ ```bash
109
+ codesign --verify --deep --strict --verbose=4 build/export/<AppName>.app
110
+ spctl --assess --verbose=4 build/export/<AppName>.app
111
+ ```
112
+
113
+ ### 5. Update App Store Connect Metadata
114
+
115
+ Navigate: **My Apps → [App] → App Store tab**
116
+
117
+ Common metadata fixes:
118
+
119
+ - **App name**: max 30 chars
120
+ - **Subtitle**: max 30 chars, no duplicate keywords from the title field
121
+ - **Keywords**: 100-char total limit, comma-separated, no spaces after commas
122
+ - **Screenshots**: exact pixel dimensions per device type (check Apple's current spec)
123
+ - **Privacy Nutrition Labels**: must accurately reflect data collected/linked to user
124
+ - **Build selection**: select the newly uploaded build before submitting
125
+
126
+ ### 6. Write Reviewer Notes
127
+
128
+ In the submission form, fill **Notes for Reviewer**:
129
+
130
+ - Explain each rejection point and what was changed
131
+ - Reference specific guideline numbers: "Addressing 2.1 — added NSMicrophoneUsageDescription to Info.plist"
132
+ - If a feature requires special credentials to test, provide test account details
133
+
134
+ ### 7. Submit and Track
135
+
136
+ 1. Upload via **Xcode Organizer → Distribute App → App Store Connect**
137
+ 2. In App Store Connect: select the new build, fill notes, **Submit for Review**
138
+ 3. Typical re-review: 24–48h
139
+ 4. If rejected again: respond in the **Resolution Center** thread (same case number)
140
+ 5. Escalate via Resolution Center for policy disagreements — do not open a new submission
141
+
142
+ ## Build Number Protocol
143
+
144
+ Apple rejects builds with a duplicate build number. Increment `CFBundleVersion` in `Info.plist` or Xcode target settings before every upload:
145
+
146
+ ```bash
147
+ # Bump build number (e.g., 9 → 10)
148
+ xcrun agvtool new-version -all 10
149
+ ```
150
+
151
+ ## Verification
152
+
153
+ - [ ] Every rejection guideline number has a corresponding fix in the plan
154
+ - [ ] `xcodebuild archive` exits 0 with no warnings about entitlements
155
+ - [ ] `codesign --verify` passes
156
+ - [ ] App Store Connect shows build status as "Ready to Submit"
157
+ - [ ] Reviewer Notes reference each changed item
158
+ - [ ] Build number is higher than any previously uploaded build
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:cloudflare-block-countries",
3
+ "version": "0.1.0",
4
+ "description": "Block specific countries via Cloudflare WAF Custom Rules using the Cloudflare API. Handles creating new rulesets and updating existing ones across single or multiple zones.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,177 @@
1
+ ---
2
+ name: cloudflare-block-countries
3
+ description: 'Block specific countries via Cloudflare WAF Custom Rules using the Cloudflare API. Use when user wants to geo-block traffic, block countries in Cloudflare, set up WAF country rules, or mentions blocking regions. Handles both creating new rulesets and updating existing ones.'
4
+ license: MIT
5
+ allowed-tools: Bash
6
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires curl and jq.
7
+ metadata:
8
+ targets: [_source-only]
9
+ author: Oleg Koval
10
+ tags:
11
+ - cloudflare
12
+ - waf
13
+ - security
14
+ - geo-blocking
15
+ - firewall
16
+ ---
17
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
18
+
19
+ # Cloudflare Country Block via WAF Custom Rules
20
+
21
+ Block traffic from specific countries using Cloudflare WAF Custom Rules and the Cloudflare API.
22
+
23
+ ## Prerequisites
24
+
25
+ - Cloudflare API Token with `Zone:Rulesets:Edit` permission
26
+ - Zone ID for the target domain
27
+ - `curl` and `jq` installed
28
+
29
+ ## Workflow
30
+
31
+ ### 1. Get Zone IDs
32
+
33
+ ```bash
34
+ curl -s -X GET \
35
+ "https://api.cloudflare.com/client/v4/zones?account.id=YOUR_ACCOUNT_ID&status=active" \
36
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
37
+ -H "Content-Type: application/json" | jq '.result[] | {name: .name, id: .id}'
38
+ ```
39
+
40
+ ### 2. Check Existing Custom Firewall Rulesets
41
+
42
+ ```bash
43
+ curl -s -X GET \
44
+ "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/rulesets" \
45
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
46
+ -H "Content-Type: application/json" | \
47
+ jq '.result[] | select(.phase == "http_request_firewall_custom")'
48
+ ```
49
+
50
+ If the output is empty — no existing ruleset. Go to **3a**. If a ruleset exists, note its `id` and go to **3b**.
51
+
52
+ ### 3a. Create NEW Ruleset with Block Rule
53
+
54
+ ```bash
55
+ curl -s -X POST \
56
+ "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/rulesets" \
57
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
58
+ -H "Content-Type: application/json" \
59
+ --data '{
60
+ "name": "default",
61
+ "description": "WAF Custom Rules",
62
+ "kind": "zone",
63
+ "phase": "http_request_firewall_custom",
64
+ "rules": [
65
+ {
66
+ "action": "block",
67
+ "description": "Block traffic from sanctioned countries",
68
+ "enabled": true,
69
+ "expression": "(ip.src.country in {\"RU\" \"BY\" \"IR\" \"KP\"})"
70
+ }
71
+ ]
72
+ }' | jq '.success'
73
+ ```
74
+
75
+ ### 3b. Update EXISTING Ruleset
76
+
77
+ ```bash
78
+ curl -s -X PUT \
79
+ "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/rulesets/RULESET_ID" \
80
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
81
+ -H "Content-Type: application/json" \
82
+ --data '{
83
+ "description": "WAF Custom Rules",
84
+ "rules": [
85
+ {
86
+ "action": "block",
87
+ "description": "Block traffic from sanctioned countries",
88
+ "enabled": true,
89
+ "expression": "(ip.src.country in {\"RU\" \"BY\" \"IR\" \"KP\"})"
90
+ }
91
+ ]
92
+ }' | jq '.success'
93
+ ```
94
+
95
+ ### 4. Verify the Rule is Active
96
+
97
+ ```bash
98
+ curl -s -X GET \
99
+ "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/rulesets/RULESET_ID" \
100
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
101
+ -H "Content-Type: application/json" | jq '.result.rules'
102
+ ```
103
+
104
+ ## Country Codes Reference
105
+
106
+ | Code | Country |
107
+ |------|---------|
108
+ | `RU` | Russia |
109
+ | `BY` | Belarus |
110
+ | `IR` | Iran |
111
+ | `KP` | North Korea |
112
+ | `CN` | China |
113
+ | `CU` | Cuba |
114
+ | `SY` | Syria |
115
+ | `VE` | Venezuela |
116
+
117
+ ## WAF Expression Examples
118
+
119
+ ```
120
+ # Block multiple countries
121
+ (ip.src.country in {"RU" "BY" "IR" "KP"})
122
+
123
+ # Block country + specific ASN
124
+ (ip.src.country eq "RU") or (ip.geoip.asnum eq 12345)
125
+
126
+ # Block all except allowlisted IPs
127
+ (ip.src.country in {"RU" "BY"}) and not (ip.src in {1.2.3.4/32})
128
+ ```
129
+
130
+ ## Multi-Zone Script
131
+
132
+ To apply the same block rule across multiple zones:
133
+
134
+ ```bash
135
+ #!/usr/bin/env bash
136
+ API_TOKEN="YOUR_API_TOKEN"
137
+ ZONES=("ZONE_ID_1" "ZONE_ID_2" "ZONE_ID_3")
138
+ EXPRESSION='(ip.src.country in {"RU" "BY" "IR" "KP"})'
139
+
140
+ for ZONE_ID in "${ZONES[@]}"; do
141
+ EXISTING=$(curl -s -X GET \
142
+ "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets" \
143
+ -H "Authorization: Bearer $API_TOKEN" \
144
+ -H "Content-Type: application/json" | \
145
+ jq -r '.result[] | select(.phase == "http_request_firewall_custom") | .id')
146
+
147
+ if [ -z "$EXISTING" ]; then
148
+ METHOD="POST"
149
+ URL="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets"
150
+ DATA=$(jq -n --arg expr "$EXPRESSION" '{
151
+ name: "default", description: "WAF Custom Rules",
152
+ kind: "zone", phase: "http_request_firewall_custom",
153
+ rules: [{action: "block", description: "Block sanctioned countries", enabled: true, expression: $expr}]
154
+ }')
155
+ else
156
+ METHOD="PUT"
157
+ URL="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$EXISTING"
158
+ DATA=$(jq -n --arg expr "$EXPRESSION" '{
159
+ description: "WAF Custom Rules",
160
+ rules: [{action: "block", description: "Block sanctioned countries", enabled: true, expression: $expr}]
161
+ }')
162
+ fi
163
+
164
+ RESULT=$(curl -s -X "$METHOD" "$URL" \
165
+ -H "Authorization: Bearer $API_TOKEN" \
166
+ -H "Content-Type: application/json" \
167
+ --data "$DATA" | jq '.success')
168
+
169
+ echo "Zone $ZONE_ID: $RESULT"
170
+ done
171
+ ```
172
+
173
+ ## Notes
174
+
175
+ - `PUT` on an existing ruleset **replaces all rules** in it. Include all rules in the payload if the ruleset already has other rules.
176
+ - WAF Custom Rules require a Cloudflare plan that supports rulesets (Free includes basic WAF; Pro/Business/Enterprise for full custom rules).
177
+ - Changes are applied globally within seconds; no cache purge needed.
@@ -0,0 +1,270 @@
1
+ ---
2
+ name: crash-course
3
+ description: 'Expert tutor that gets you from zero to working knowledge on any TOPIC fast, grounded in real sources rather than generic filler. Use this whenever the user wants to LEARN, understand, ramp up on, or get up to speed on something and has limited time: a new codebase or project they have been assigned, an unfamiliar technology or framework, a domain concept, an API, a paper, a business area. Triggers on phrases like "help me learn X", "I have N hours to understand X", "teach me X", "get me up to speed on X", "crash course on X", "quiz me on X", "make me a cheat sheet for X", "explain X like I am 5", "I got assigned X and have no context". Runs a timed 4-hour sprint by default, or a single mode on request (cheat sheet, learning ladder, quiz-me, Feynman loop, resource curation). Prefer this over answering a learning request directly, because the value is the structured, interactive, source-grounded teaching loop, not a one-shot dump.'
4
+ license: MIT
5
+ allowed-tools: Read, Grep, Glob, Bash, WebSearch, WebFetch
6
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Teaches from whatever sources are reachable; a codebase topic benefits from repo access and relevant issue/doc/chat tools.
7
+ metadata:
8
+ targets: [_source-only]
9
+ author: Oleg Koval
10
+ tags:
11
+ - learning
12
+ - tutor
13
+ - onboarding
14
+ - study
15
+ - feynman
16
+ - active-recall
17
+ ---
18
+
19
+ # Crash Course
20
+
21
+ An expert tutor for rapid, durable learning of any topic. The learner is smart and
22
+ time-boxed. Your job is not to lecture. It is to build a real mental model, prove it
23
+ with recall, and leave behind artifacts they can reuse.
24
+
25
+ Two things make this skill better than pasting a prompt into a chat window:
26
+
27
+ 1. **You become an expert on the real topic first** (Step 0), from actual sources, so
28
+ every explanation is true and specific rather than plausible-sounding filler.
29
+ 2. **You teach interactively** and hold the learner to active recall, instead of
30
+ dumping a wall of text they will forget by lunch.
31
+
32
+ ## Step 0: Scope and become the expert (do this before teaching anything)
33
+
34
+ Never teach from memory alone. First pin the topic, then go read the ground truth.
35
+
36
+ 1. **Confirm scope in one line.** What exactly are we learning, to what depth, and
37
+ why? If the request is vague ("learn the ELC project"), ask one clarifying
38
+ question, then proceed. Do not over-interview.
39
+
40
+ 2. **Gather real sources** appropriate to the topic. Spend a few minutes here; it
41
+ pays for the whole session.
42
+ - **A codebase / work project:** read the README, the key PRs and their
43
+ descriptions, issue-tracker tickets, docs, and relevant chat threads. Use
44
+ whatever tools and CLIs are available (`gh`, repo search, and any connected
45
+ issue/doc/chat integrations). Skim the actual entry-point files, not just docs.
46
+ - **A public technology / concept / paper:** use web search and fetch the primary
47
+ sources (official docs, the paper itself, the canonical guide). Prefer source
48
+ material over blog summaries.
49
+ - Note the 3 to 5 sources you actually used. If you could not verify something,
50
+ say so rather than inventing it.
51
+
52
+ 3. **Find the 80/20.** From the sources, identify the ~20% of concepts that unlock
53
+ ~80% of understanding. That set becomes the spine of the session. State it
54
+ explicitly to the learner before diving in.
55
+
56
+ ## The teaching contract (how to behave in every mode)
57
+
58
+ These are the habits that separate real tutoring from a text dump. Follow them
59
+ throughout.
60
+
61
+ - **One thing at a time, then wait.** When you ask a quiz question or ask the learner
62
+ to explain something back, ask ONE and stop. Do not answer your own question. Do
63
+ not pre-write the next three. Real recall only happens when they actually respond.
64
+ - **Ground every claim in the sources from Step 0.** Use the project's real names,
65
+ files, endpoints, and numbers. Specificity is what makes it stick and what makes it
66
+ trustworthy.
67
+ - **ELI5 on demand.** If a concept is landing hard, or the learner asks, re-explain it
68
+ as if to a curious 12-year-old: plain words, a real-world analogy, no jargon. Then
69
+ climb back up to the precise version once the intuition is there.
70
+ - **Adapt to their answers.** Right answer, push harder. Weak answer, find the exact
71
+ gap and re-teach only that. Do not restart from scratch.
72
+ - **Leave an artifact.** Every mode ends with something saveable: a cheat sheet, clean
73
+ notes, a score with a revision plan. Offer to save it as a note or file.
74
+ - **Honesty about limits.** If the sources did not cover something, teach the shape of
75
+ the gap and where they would find the answer, rather than bluffing.
76
+
77
+ ## Modes
78
+
79
+ Default to the **4-Hour Sprint** unless the learner asks for a specific mode. If they
80
+ have a different time budget, scale the blocks proportionally (a 1-hour version is
81
+ just Block 1 plus a short version of Block 3). You can also run any single mode on its
82
+ own, or chain them.
83
+
84
+ | Mode | Use when |
85
+ |------|----------|
86
+ | **4-Hour Sprint** | "I have ~4 hours to learn X" |
87
+ | **One-page cheat sheet** | "make me a cheat sheet / quick reference" |
88
+ | **Learning ladder** | "break X into levels, I want to build foundations" |
89
+ | **Quiz me until I break** | "test me / find the edge of my understanding" |
90
+ | **Feynman loop** | "teach me and make me explain it back" |
91
+ | **Find the signal** | "what are the best resources to learn X" |
92
+
93
+ The Sprint embeds the Feynman loop, flashcards, and a final cheat sheet. The
94
+ standalone protocols for the other modes are in the "Standalone modes" section at the
95
+ end of this file.
96
+
97
+ ## The 4-Hour Sprint
98
+
99
+ Four 60-minute blocks. Blocks 1 to 2 build the model; Blocks 3 to 4 prove it by doing.
100
+ Announce the plan up front (the four block titles and what each delivers), then run
101
+ one block at a time. At each block boundary, pause: give a 2-line recap and ask if
102
+ they want a break, a re-explain, or to continue.
103
+
104
+ Keep the learner active the whole way. A block is not you talking for 60 minutes; it
105
+ is short explanation, then a check, then their turn.
106
+
107
+ ### Block 1 (0:00 to 1:00) — The map and the vocabulary
108
+
109
+ Goal: the learner can say what the topic *is*, why it exists, and name its main parts.
110
+
111
+ - Open with the 80/20 spine from Step 0: the handful of concepts everything hangs on.
112
+ - Teach each core concept in a tight loop: a plain-language definition, one concrete
113
+ example from the real sources, then a one-line check question. Wait for the answer.
114
+ - Maintain a running glossary of the key terms and their one-line definitions.
115
+ - **End-of-block quiz (3 questions), one at a time.** Cover: what it is, why it
116
+ exists, and the single most important distinction in the topic. Grade briefly,
117
+ fill gaps.
118
+
119
+ ### Block 2 (1:00 to 2:00) — How the pieces fit together
120
+
121
+ Goal: the learner understands the flow, the interactions, and the "why it is built
122
+ this way" tradeoffs.
123
+
124
+ - Move from nouns to verbs: how does data/control actually move through the system or
125
+ argument? Draw it as a simple text diagram or numbered flow.
126
+ - Teach the 2 to 3 decisions or tradeoffs that a practitioner argues about. This is
127
+ where real understanding lives.
128
+ - Introduce the sharp edges: the gotchas, the known bugs, the "this looks wrong but
129
+ is intentional" spots you found in the sources.
130
+ - **End-of-block quiz (3 questions), one at a time**, focused on flow and tradeoffs,
131
+ not vocabulary. Then have the learner give a 3-sentence Feynman-style summary of the
132
+ whole topic so far; correct only what they missed.
133
+
134
+ ### Block 3 (2:00 to 3:00) — Build something (30-minute mini-project)
135
+
136
+ Goal: touch the real thing. Understanding without contact is fragile.
137
+
138
+ - Design a **30-minute mini-project** scoped to what they just learned and to what is
139
+ actually runnable in their environment. For a codebase: run it locally, trace one
140
+ request end to end, add a log line and see it fire, or write one small failing test
141
+ and make it pass. For a concept: a tiny worked calculation, a small script, a
142
+ hand-derivation.
143
+ - Give it as numbered steps with a clear "done looks like this" at the end.
144
+ - Let them drive. When they hit an error, coach toward the fix; do not just hand it
145
+ over. Use the remaining time in the block to debug together.
146
+
147
+ ### Block 4 (3:00 to 4:00) — Prove it and lock it in
148
+
149
+ Goal: confirm retention and produce the take-home artifacts.
150
+
151
+ - **Feynman pass:** ask the learner to teach the whole topic back to you in their own
152
+ words as if you were a new teammate. Note every gap, misconception, or hand-wave.
153
+ Re-teach only those. Ask them to explain the weak parts again, cleaner. Loop until
154
+ the explanation is accurate and simple.
155
+ - **Final 10-question flashcard quiz**, one at a time, difficulty ramping from basic
156
+ recall to expert judgment. After each: score out of 10, what was right, the exact
157
+ gap, and a one-line re-explanation of only the missed part.
158
+ - **Wrap-up artifact:** produce a one-page cheat sheet (format in the Standalone modes
159
+ section) plus a short scorecard: final score, strongest areas, weakest areas, and a
160
+ 3-bullet revision plan. Offer to save both.
161
+
162
+ ## Example: kicking off a sprint
163
+
164
+ Input: "I got assigned the loyalty proxy and have ~4 hours, no context."
165
+
166
+ Good opening move: confirm scope in one line, then do Step 0 (read the repo README,
167
+ the relevant PRs, the tickets, the relevant chat threads), extract the 80/20 spine,
168
+ and only then present the four-block plan and start Block 1. Do not start lecturing
169
+ from memory before reading the actual code.
170
+
171
+ ---
172
+
173
+ # Standalone modes
174
+
175
+ Each mode can run on its own. They all assume Step 0 (become the expert from real
176
+ sources) and the teaching contract above still apply: ground everything in real
177
+ sources, one question at a time, ELI5 on demand, end with a saveable artifact.
178
+
179
+ ## One-page cheat sheet
180
+
181
+ A compact review sheet the learner can scan in 5 minutes right before they need the
182
+ topic. It is a study map, not an explanation. Keep it dense, visual, and scannable.
183
+
184
+ Produce exactly these sections:
185
+
186
+ 1. **What it is** — one or two sentences, plain language.
187
+ 2. **Core concepts / rules / steps** — the load-bearing ideas as tight bullets, not
188
+ paragraphs. Include formulas or exact command/endpoint names where they apply.
189
+ 3. **Mental model** — one simple text diagram, flowchart, table, or analogy that makes
190
+ the whole thing click. Only include it if it genuinely helps.
191
+ 4. **3 to 5 real examples** — concrete, from the actual sources, showing the topic in
192
+ use.
193
+ 5. **Common mistakes / confusing parts** — the traps, with the correction.
194
+ 6. **Before you use this checklist** — 3 to 6 quick pre-flight checks.
195
+ 7. **5 rapid-fire questions** — memory checks. Put answers below a divider so they can
196
+ self-test first.
197
+
198
+ Then offer to save it. Avoid theory padding; if a line is not useful under time
199
+ pressure, cut it.
200
+
201
+ ## Learning ladder
202
+
203
+ Break the topic into 5 difficulty levels so the learner climbs without skipping
204
+ foundations. Present the ladder, then let them tell you which rung they are on.
205
+
206
+ For **each** level give:
207
+ 1. Level name
208
+ 2. What you should understand at this stage
209
+ 3. What mastery looks like here
210
+ 4. The most important concepts/skills to focus on
211
+ 5. One milestone that proves you are ready to move up
212
+ 6. One hands-on exercise or mini-project
213
+ 7. Common mistakes at this level
214
+ 8. A single self-check question to gate the next level
215
+
216
+ Fixed structure: **Level 1: Complete Beginner**, **Level 2: Basic Understanding**,
217
+ **Level 3: Practical User**, **Level 4: Problem Solver**, **Level 5: Confident
218
+ Practitioner**.
219
+
220
+ Keep it practical and about real progress. Do not overload with theory. End by
221
+ pointing them at the exercise for whatever level they are currently on.
222
+
223
+ ## Quiz me until I break
224
+
225
+ A strict-but-helpful examiner using active recall to find the exact edge of the
226
+ learner's understanding.
227
+
228
+ Rules:
229
+ - Ask **10 questions, one at a time**, and WAIT for each answer. Never batch.
230
+ - Difficulty ramp: Q1 to Q3 beginner, Q4 to Q6 intermediate, Q7 to Q8 advanced,
231
+ Q9 to Q10 expert.
232
+ - After each answer, do four things: grade it out of 10; say what they got right; name
233
+ the exact gap or weak point; re-explain only the missed part, simply.
234
+ - If an answer is weak, ask one targeted follow-up before moving on. If it is strong,
235
+ nudge the difficulty up.
236
+ - Do not reveal all answers at once. Make it feel like a real oral exam.
237
+
238
+ At the end give: final score, strongest areas, weakest areas, a short revision plan,
239
+ and 5 final challenge questions to push toward mastery. Offer to save the scorecard.
240
+
241
+ ## Feynman loop
242
+
243
+ Deep understanding by forcing the learner to teach it back.
244
+
245
+ 1. First explain the topic simply, as if to a 12-year-old: plain words, real-life
246
+ examples, analogies, no needless jargon, short.
247
+ 2. Ask the learner to explain it back in their own words.
248
+ 3. Review their explanation: note what they got right; find every gap, mistake, or
249
+ missing idea; re-teach only the wrong or missing parts; ask them to explain again,
250
+ cleaner.
251
+ 4. Repeat the loop until their explanation is simple, accurate, and complete. Do not
252
+ advance while it is still muddy. Correct gently but clearly; reach for an example
253
+ whenever they are confused.
254
+
255
+ End with a final clean explanation of the topic they can save as notes.
256
+
257
+ ## Find the signal
258
+
259
+ Curate the 5 highest-leverage resources so the learner does not waste time on noise.
260
+ Resources can be books, courses, videos, docs, newsletters, communities, or people to
261
+ follow. For a work/codebase topic, "resources" can include the specific internal docs,
262
+ PRs, and people who own the area.
263
+
264
+ For **each** of the 5 resources give: name; type; why it is worth their time; what
265
+ specific part of the topic it teaches; best learner type for it; difficulty
266
+ (beginner/intermediate/advanced); how to use it effectively; one warning about what
267
+ NOT to waste time on.
268
+
269
+ Then rank the 5 in the best order to consume them, and give a simple 7-day learning
270
+ path using only those resources. Favor quality over quantity. Signal, not noise.
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "olko-crash-course",
3
+ "description": "Expert tutor for rapid, source-grounded learning of any topic: a timed 4-hour sprint plus cheat-sheet, learning-ladder, quiz-me, Feynman, and resource-curation modes.",
4
+ "skills": "./skills"
5
+ }