@olegkoval/agent-skills 1.27.0 → 1.29.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.
- package/.claude-plugin/plugin.json +7 -2
- package/.cursor-plugin/index.json +21 -1
- package/.grok-plugin/index.json +21 -1
- package/.kiro/steering/garmin-watchface.md +83 -31
- package/.windsurf/rules/garmin-watchface.md +83 -31
- package/README.md +9 -4
- package/catalog/skills.json +113 -1
- package/package.json +1 -1
- package/packages/software-development/branch-cleanup/SKILL.md +204 -0
- package/packages/software-development/branch-cleanup/adapters/claude/plugin.json +5 -0
- package/packages/software-development/branch-cleanup/adapters/claude/skills/branch-cleanup/SKILL.md +205 -0
- package/packages/software-development/branch-cleanup/adapters/codex/README.md +19 -0
- package/packages/software-development/branch-cleanup/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/branch-cleanup/adapters/cursor/skills/branch-cleanup/SKILL.md +205 -0
- package/packages/software-development/branch-cleanup/adapters/grok/plugin.json +6 -0
- package/packages/software-development/branch-cleanup/adapters/grok/skills/branch-cleanup/SKILL.md +205 -0
- package/packages/software-development/lekker-review/SKILL.md +519 -0
- package/packages/software-development/lekker-review/adapters/claude/plugin.json +5 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/SKILL.md +520 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/completeness-critic.md +21 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/conventions.md +124 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/fix-verifier.md +84 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/fixer.md +120 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/implementation.md +53 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/prover.md +135 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/quality.md +72 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/simplification.md +45 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/test-quality.md +170 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/triage-logic.md +27 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/triage-quality.md +41 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/verifier.md +295 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/artifact-page.md +143 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/context-gathering.md +162 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/fix-mode.md +329 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/github-post.md +205 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/house-rules.md +76 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/output-format.md +232 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/scripts/changed-files.sh +77 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/scripts/setup-worktree.sh +337 -0
- package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/scripts/verify-fixes.sh +231 -0
- package/packages/software-development/lekker-review/fix-workflow.js +273 -0
- package/packages/software-development/lekker-review/references/agents/completeness-critic.md +21 -0
- package/packages/software-development/lekker-review/references/agents/conventions.md +124 -0
- package/packages/software-development/lekker-review/references/agents/fix-verifier.md +84 -0
- package/packages/software-development/lekker-review/references/agents/fixer.md +120 -0
- package/packages/software-development/lekker-review/references/agents/implementation.md +53 -0
- package/packages/software-development/lekker-review/references/agents/prover.md +135 -0
- package/packages/software-development/lekker-review/references/agents/quality.md +72 -0
- package/packages/software-development/lekker-review/references/agents/simplification.md +45 -0
- package/packages/software-development/lekker-review/references/agents/test-quality.md +170 -0
- package/packages/software-development/lekker-review/references/agents/triage-logic.md +27 -0
- package/packages/software-development/lekker-review/references/agents/triage-quality.md +41 -0
- package/packages/software-development/lekker-review/references/agents/verifier.md +295 -0
- package/packages/software-development/lekker-review/references/artifact-page.md +143 -0
- package/packages/software-development/lekker-review/references/context-gathering.md +162 -0
- package/packages/software-development/lekker-review/references/fix-mode.md +329 -0
- package/packages/software-development/lekker-review/references/github-post.md +205 -0
- package/packages/software-development/lekker-review/references/house-rules.md +76 -0
- package/packages/software-development/lekker-review/references/output-format.md +232 -0
- package/packages/software-development/lekker-review/scripts/changed-files.sh +77 -0
- package/packages/software-development/lekker-review/scripts/setup-worktree.sh +337 -0
- package/packages/software-development/lekker-review/scripts/verify-fixes.sh +231 -0
- package/packages/software-development/lekker-review/workflow.js +602 -0
- package/packages/software-development/morning-routine/SKILL.md +149 -0
- package/packages/software-development/morning-routine/adapters/claude/plugin.json +5 -0
- package/packages/software-development/morning-routine/adapters/claude/skills/morning-routine/SKILL.md +150 -0
- package/packages/software-development/morning-routine/adapters/codex/README.md +19 -0
- package/packages/software-development/morning-routine/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/morning-routine/adapters/cursor/skills/morning-routine/SKILL.md +150 -0
- package/packages/software-development/morning-routine/adapters/grok/plugin.json +6 -0
- package/packages/software-development/morning-routine/adapters/grok/skills/morning-routine/SKILL.md +150 -0
- package/packages/software-development/pr-finalize-complete/adapters/claude/plugin.json +1 -1
- package/packages/software-development/pr-finalize-complete/adapters/codex/README.md +7 -11
- package/packages/software-development/pr-finalize-complete/adapters/cursor/plugin.json +1 -1
- package/packages/software-development/pr-finalize-complete/adapters/grok/plugin.json +1 -1
- package/packages/software-development/release-day/SKILL.md +286 -0
- package/packages/software-development/release-day/adapters/claude/plugin.json +5 -0
- package/packages/software-development/release-day/adapters/claude/skills/release-day/SKILL.md +287 -0
- package/packages/software-development/release-day/adapters/codex/README.md +19 -0
- package/packages/software-development/release-day/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/release-day/adapters/cursor/skills/release-day/SKILL.md +287 -0
- package/packages/software-development/release-day/adapters/grok/plugin.json +6 -0
- package/packages/software-development/release-day/adapters/grok/skills/release-day/SKILL.md +287 -0
- package/packages/wearables/garmin-watchface/SKILL.md +82 -35
- package/packages/wearables/garmin-watchface/adapters/claude/plugin.json +1 -1
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/SKILL.md +82 -35
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/design-proposals.md +99 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/devices.md +112 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/display.md +78 -3
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/layout.md +28 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/publishing.md +134 -5
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/simulator.md +86 -2
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-inspire +329 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-mock +502 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-release +12 -6
- package/packages/wearables/garmin-watchface/adapters/cursor/plugin.json +1 -1
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/SKILL.md +82 -35
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/design-proposals.md +99 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/devices.md +112 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/display.md +78 -3
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/layout.md +28 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/publishing.md +134 -5
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/simulator.md +86 -2
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-inspire +329 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-mock +502 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-release +12 -6
- package/packages/wearables/garmin-watchface/adapters/grok/plugin.json +1 -1
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/SKILL.md +82 -35
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/design-proposals.md +99 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/devices.md +112 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/display.md +78 -3
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/layout.md +28 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/publishing.md +134 -5
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/simulator.md +86 -2
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-inspire +329 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-mock +502 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-release +12 -6
- package/packages/wearables/garmin-watchface/adapters/kiro/steering/garmin-watchface.md +83 -31
- package/packages/wearables/garmin-watchface/adapters/windsurf/rules/garmin-watchface.md +83 -31
- package/packages/wearables/garmin-watchface/references/design-proposals.md +99 -0
- package/packages/wearables/garmin-watchface/references/devices.md +112 -0
- package/packages/wearables/garmin-watchface/references/display.md +78 -3
- package/packages/wearables/garmin-watchface/references/inspiration-wizard.md +140 -0
- package/packages/wearables/garmin-watchface/references/layout.md +28 -0
- package/packages/wearables/garmin-watchface/references/publishing.md +134 -5
- package/packages/wearables/garmin-watchface/references/simulator.md +86 -2
- package/packages/wearables/garmin-watchface/scripts/ciq-inspire +329 -0
- package/packages/wearables/garmin-watchface/scripts/ciq-mock +502 -0
- package/packages/wearables/garmin-watchface/scripts/ciq-release +12 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "olko-agent-skills",
|
|
3
3
|
"description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.28.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Oleg Koval"
|
|
7
7
|
},
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"repository": "https://github.com/oleg-koval/agent-skills",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"skills": [
|
|
12
|
+
"./packages/software-development/lekker-review",
|
|
12
13
|
"./packages/software-development/self-critique",
|
|
13
14
|
"./packages/software-development/docs-index-keeper",
|
|
14
15
|
"./packages/software-development/semantic-release-beta",
|
|
@@ -47,6 +48,10 @@
|
|
|
47
48
|
"./packages/software-development/ci-fix-loop",
|
|
48
49
|
"./packages/software-development/pr-to-green",
|
|
49
50
|
"./packages/software-development/dependabot-triage",
|
|
50
|
-
"./packages/software-development/store-listing-copy"
|
|
51
|
+
"./packages/software-development/store-listing-copy",
|
|
52
|
+
"./packages/software-development/pr-finalize-complete",
|
|
53
|
+
"./packages/software-development/morning-routine",
|
|
54
|
+
"./packages/software-development/release-day",
|
|
55
|
+
"./packages/software-development/branch-cleanup"
|
|
51
56
|
]
|
|
52
57
|
}
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
{
|
|
125
125
|
"name": "olko:garmin-watchface",
|
|
126
126
|
"source": "./packages/wearables/garmin-watchface/adapters/cursor",
|
|
127
|
-
"description": "
|
|
127
|
+
"description": "Design, build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
130
|
"name": "olko:coderabbitloop",
|
|
@@ -185,6 +185,26 @@
|
|
|
185
185
|
"name": "olko:store-listing-copy",
|
|
186
186
|
"source": "./packages/software-development/store-listing-copy/adapters/cursor",
|
|
187
187
|
"description": "Generate platform-validated App Store, Google Play, and Connect IQ store listing copy (title, subtitle, description, what's new, keywords) from a git changelog or release notes."
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"name": "olko:pr-finalize-complete",
|
|
191
|
+
"source": "./packages/software-development/pr-finalize-complete/adapters/cursor",
|
|
192
|
+
"description": "Comprehensive PR finalization workflow for PRs that may already be partially addressed: checks each review comment's actual current status in code, distinguishes fixed vs. stale vs. still-present findings, verifies test coverage, runs real lint/test gates, and reports what still needs a human."
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"name": "olko:morning-routine",
|
|
196
|
+
"source": "./packages/software-development/morning-routine/adapters/cursor",
|
|
197
|
+
"description": "Run the complete start-of-day setup in one pass: roll over unfinished Obsidian tasks to today's daily note, sync open GitHub PRs that need your attention, and sweep Dependabot patch bumps. Chains obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage."
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "olko:release-day",
|
|
201
|
+
"source": "./packages/software-development/release-day/adapters/cursor",
|
|
202
|
+
"description": "Orchestrate a full release-day workflow for iOS, Android, or Garmin apps: verify main branch CI is green, generate changelog, draft platform-ready store listing copy, trigger semantic-release or tag manually, wait for the build, and queue the App Store submission."
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"name": "olko:branch-cleanup",
|
|
206
|
+
"source": "./packages/software-development/branch-cleanup/adapters/cursor",
|
|
207
|
+
"description": "Prune stale git branches after a merge wave: delete closed/merged remote branches, remove local tracking refs that no longer exist on the remote, and optionally clean up merged local branches. Natural follow-up to dependabot-triage."
|
|
188
208
|
}
|
|
189
209
|
]
|
|
190
210
|
}
|
package/.grok-plugin/index.json
CHANGED
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
{
|
|
135
135
|
"name": "olko:garmin-watchface",
|
|
136
136
|
"source": "./packages/wearables/garmin-watchface/adapters/grok",
|
|
137
|
-
"description": "
|
|
137
|
+
"description": "Design, build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
|
|
138
138
|
},
|
|
139
139
|
{
|
|
140
140
|
"name": "olko:coderabbitloop",
|
|
@@ -195,6 +195,26 @@
|
|
|
195
195
|
"name": "olko:store-listing-copy",
|
|
196
196
|
"source": "./packages/software-development/store-listing-copy/adapters/grok",
|
|
197
197
|
"description": "Generate platform-validated App Store, Google Play, and Connect IQ store listing copy (title, subtitle, description, what's new, keywords) from a git changelog or release notes."
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "olko:pr-finalize-complete",
|
|
201
|
+
"source": "./packages/software-development/pr-finalize-complete/adapters/grok",
|
|
202
|
+
"description": "Comprehensive PR finalization workflow for PRs that may already be partially addressed: checks each review comment's actual current status in code, distinguishes fixed vs. stale vs. still-present findings, verifies test coverage, runs real lint/test gates, and reports what still needs a human."
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"name": "olko:morning-routine",
|
|
206
|
+
"source": "./packages/software-development/morning-routine/adapters/grok",
|
|
207
|
+
"description": "Run the complete start-of-day setup in one pass: roll over unfinished Obsidian tasks to today's daily note, sync open GitHub PRs that need your attention, and sweep Dependabot patch bumps. Chains obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage."
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"name": "olko:release-day",
|
|
211
|
+
"source": "./packages/software-development/release-day/adapters/grok",
|
|
212
|
+
"description": "Orchestrate a full release-day workflow for iOS, Android, or Garmin apps: verify main branch CI is green, generate changelog, draft platform-ready store listing copy, trigger semantic-release or tag manually, wait for the build, and queue the App Store submission."
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "olko:branch-cleanup",
|
|
216
|
+
"source": "./packages/software-development/branch-cleanup/adapters/grok",
|
|
217
|
+
"description": "Prune stale git branches after a merge wave: delete closed/merged remote branches, remove local tracking refs that no longer exist on the remote, and optionally clean up merged local branches. Natural follow-up to dependabot-triage."
|
|
198
218
|
}
|
|
199
219
|
]
|
|
200
220
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
---
|
|
4
4
|
inclusion: manual
|
|
5
|
-
description: "
|
|
5
|
+
description: "Design, build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Garmin Connect IQ watch faces
|
|
@@ -12,43 +12,43 @@ that draws off the bottom of the screen, a test suite that contains no tests, an
|
|
|
12
12
|
a colour that is not the colour you get. Everything below is a failure mode that
|
|
13
13
|
looked like success first.
|
|
14
14
|
|
|
15
|
-
**Read `
|
|
15
|
+
**Read `reference/` files as needed — do not read them all up front.**
|
|
16
16
|
|
|
17
17
|
| File | When |
|
|
18
18
|
| --- | --- |
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
25
|
-
| `
|
|
19
|
+
| `reference/display.md` | Choosing colours, brightness, legibility; **AMOLED always-on and burn-in** |
|
|
20
|
+
| `reference/layout.md` | Positioning anything; content clipped, overlapping, or off-screen |
|
|
21
|
+
| `reference/testing.md` | Writing tests; a suspiciously clean test run |
|
|
22
|
+
| `reference/simulator.md` | Screenshots, settings not applying, monkeydo hanging |
|
|
23
|
+
| `reference/devices.md` | Adding device support, launcher icons, API levels |
|
|
24
|
+
| `reference/store.md` | Publishing, listing copy, IP questions |
|
|
25
|
+
| `reference/publishing.md` | Driving the store portal in a browser; upload/update flow, validator rejections |
|
|
26
26
|
|
|
27
27
|
## Tools
|
|
28
28
|
|
|
29
29
|
Run these rather than reinventing them. All are standalone.
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
bin/ciq-doctor # toolchain check: SDK, JDK, key, devices
|
|
33
|
+
bin/ciq-devices # survey installed devices by resolution
|
|
34
|
+
bin/ciq-devices --same-as fenix6pro # products you can add with no code change
|
|
35
|
+
bin/ciq-capture out.png # calibrated simulator screenshot
|
|
36
|
+
bin/ciq-capture out.png --face --size 260 # cropped + masked to the round display
|
|
37
|
+
bin/ciq-calibrate # re-derive the display rect if capture looks wrong
|
|
38
|
+
bin/ciq-release # pre-submission check: package, screenshots, icon, keys, copy
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
`bin/ciq-release` is what you run before opening the store portal. Every check
|
|
42
|
+
in it is something otherwise discovered halfway through the submission form --
|
|
43
|
+
a stale screenshot set, an icon still copied from the last project, or copy
|
|
44
|
+
containing a character the description validator rejects.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
`bin/ciq-capture` exists because `screencapture -R` grabs a screen *region*, not
|
|
47
47
|
a window: without a frontmost check it silently photographs whatever is on top,
|
|
48
48
|
and the window moves between simulator restarts. Both failure modes produce a
|
|
49
49
|
plausible PNG of the wrong thing.
|
|
50
50
|
|
|
51
|
-
## The
|
|
51
|
+
## The seven things that will bite you
|
|
52
52
|
|
|
53
53
|
### 1. `make test` can compile zero tests and report success
|
|
54
54
|
|
|
@@ -58,7 +58,7 @@ get `BUILD SUCCESSFUL` and a green run with nothing compiled — even when the t
|
|
|
58
58
|
files reference symbols that no longer exist.
|
|
59
59
|
|
|
60
60
|
Fix: a second jungle passed as an additional `-f`. See
|
|
61
|
-
|
|
61
|
+
`templates/monkey.test.jungle` and the `test` target in `templates/Makefile`.
|
|
62
62
|
|
|
63
63
|
**Prove it before you trust it.** Put a deliberately unresolvable symbol in one
|
|
64
64
|
test and confirm the build fails:
|
|
@@ -79,6 +79,13 @@ they look. Measured on fenix 6 Pro:
|
|
|
79
79
|
| `FONT_SMALL` | 32 |
|
|
80
80
|
| `FONT_NUMBER_MEDIUM` | 74 |
|
|
81
81
|
|
|
82
|
+
**Font tiers already scale with the device.** `FONT_XTINY` is a tier, not a
|
|
83
|
+
pixel height: a 454px watch supplies a proportionately taller glyph than a
|
|
84
|
+
260px one, unasked. So when text looks wrong at a new resolution, the bug is a
|
|
85
|
+
LENGTH that failed to scale, never the font. Do not add screen-size branching
|
|
86
|
+
to pick a bigger tier -- doing so double-scales, and labels end up wider than
|
|
87
|
+
the containers naming them.
|
|
88
|
+
|
|
82
89
|
Content drawn past the screen height is simply invisible — no error, no warning,
|
|
83
90
|
no clipping indicator. A two-line `FONT_NUMBER_MEDIUM` block is 148px of a 260px
|
|
84
91
|
face.
|
|
@@ -93,7 +100,7 @@ function clampRuleY(derived as Number, footerH as Number) as Number {
|
|
|
93
100
|
}
|
|
94
101
|
```
|
|
95
102
|
|
|
96
|
-
See `
|
|
103
|
+
See `reference/layout.md`.
|
|
97
104
|
|
|
98
105
|
### 3. The screen is round; your layout is not
|
|
99
106
|
|
|
@@ -122,7 +129,7 @@ simulator's backlit LCD.
|
|
|
122
129
|
Corollary: a saturated colour on a glyph reflects only its own channel, making
|
|
123
130
|
the thing you want to read the *dimmest* thing on screen.
|
|
124
131
|
|
|
125
|
-
See `
|
|
132
|
+
See `reference/display.md`.
|
|
126
133
|
|
|
127
134
|
### 5. The simulator lies about settings
|
|
128
135
|
|
|
@@ -133,14 +140,59 @@ settings code.
|
|
|
133
140
|
|
|
134
141
|
Reset also drops the loaded device, so relaunch and re-push afterwards.
|
|
135
142
|
|
|
136
|
-
See `
|
|
143
|
+
See `reference/simulator.md`.
|
|
144
|
+
|
|
145
|
+
### 6. On AMOLED, the face you designed is the one that fails review
|
|
146
|
+
|
|
147
|
+
`requiresBurnInProtection` devices must show a restricted always-on frame
|
|
148
|
+
between wrist raises. The trap is that the *stronger* your face's identity —
|
|
149
|
+
a bright panel, a filled dial — the worse a dimmed version of it performs,
|
|
150
|
+
because it still lights most of the screen. The always-on frame has to be a
|
|
151
|
+
different drawing: outlines where there were fills, and shifted a few pixels on
|
|
152
|
+
a cycle so no pixel is driven continuously.
|
|
153
|
+
|
|
154
|
+
Also note the flag can be **null** on older products, and a null propagating
|
|
155
|
+
into a `Boolean` field throws at the first wrist drop.
|
|
156
|
+
|
|
157
|
+
See the AMOLED section of `reference/display.md`.
|
|
158
|
+
|
|
159
|
+
### 7. A watch face CAN have settings on the watch
|
|
160
|
+
|
|
161
|
+
`AppBase.getSettingsView()` has existed since **API 3.2.0** and the SDK
|
|
162
|
+
documents it as "only applicable to watch faces and data fields". Plenty of
|
|
163
|
+
store copy — including, at one point, this author's own — claims settings are
|
|
164
|
+
reachable only from the phone. They are not.
|
|
165
|
+
|
|
166
|
+
The override signature must include `or Null` or the compiler rejects it as
|
|
167
|
+
narrowing:
|
|
168
|
+
|
|
169
|
+
```monkeyc
|
|
170
|
+
function getSettingsView() as
|
|
171
|
+
[WatchUi.Views] or [WatchUi.Views, WatchUi.InputDelegates] or Null {
|
|
172
|
+
return [new SettingsMenu(), new SettingsMenuDelegate()];
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Two things to get right in the menu itself:
|
|
177
|
+
|
|
178
|
+
- `ToggleMenuItem` has **already flipped its own state** by the time `onSelect`
|
|
179
|
+
runs. Read `isEnabled()`; negating the stored value inverts the setting.
|
|
180
|
+
- A picker should `setFocus()` the current choice, not open at the top of a long
|
|
181
|
+
list. If the list filters out unavailable options, item position is *not* the
|
|
182
|
+
option id — count the focus row as you build the list.
|
|
183
|
+
|
|
184
|
+
Keep one module that owns every property read, each wrapped with a default, and
|
|
185
|
+
have both the phone path and the on-watch menu go through it. Two readers with
|
|
186
|
+
two sets of defaults is exactly how the watch and the phone come to disagree
|
|
187
|
+
about what "off" means — and check the fallbacks actually match
|
|
188
|
+
`properties.xml`, because nothing enforces that.
|
|
137
189
|
|
|
138
190
|
## Workflow
|
|
139
191
|
|
|
140
192
|
### Starting a face
|
|
141
193
|
|
|
142
|
-
1.
|
|
143
|
-
2. Copy
|
|
194
|
+
1. `bin/ciq-doctor` — confirm SDK, JDK, developer key, target device installed.
|
|
195
|
+
2. Copy `templates/Makefile`, `templates/monkey.jungle`, `templates/monkey.test.jungle`.
|
|
144
196
|
3. Generate a fresh app id: `python3 -c "import uuid;print(uuid.uuid4().hex)"`.
|
|
145
197
|
4. Split source by responsibility. This structure has held up well:
|
|
146
198
|
|
|
@@ -169,7 +221,7 @@ Capture and *look at it*. Layout bugs are invisible in a passing test run:
|
|
|
169
221
|
|
|
170
222
|
```bash
|
|
171
223
|
make build && make sim
|
|
172
|
-
|
|
224
|
+
bin/ciq-capture /tmp/face.png --face --size 260
|
|
173
225
|
```
|
|
174
226
|
|
|
175
227
|
Then Read the PNG. Every layout bug in this skill's history was found by looking,
|
|
@@ -202,7 +254,7 @@ are what makes it recognisable:
|
|
|
202
254
|
- **Where the legends sit** — maker's name on the bezel, not the glass.
|
|
203
255
|
|
|
204
256
|
No system font is a segment display. If you need one, draw it: see
|
|
205
|
-
`
|
|
257
|
+
`reference/layout.md` for a working seven-segment renderer, including the ghost
|
|
206
258
|
(unlit) segments that are most of what sells the effect.
|
|
207
259
|
|
|
208
|
-
**Do not print a real brand on the face.** See `
|
|
260
|
+
**Do not print a real brand on the face.** See `reference/store.md`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
2
2
|
|
|
3
3
|
---
|
|
4
|
-
description: "
|
|
4
|
+
description: "Design, build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Garmin Connect IQ watch faces
|
|
@@ -11,43 +11,43 @@ that draws off the bottom of the screen, a test suite that contains no tests, an
|
|
|
11
11
|
a colour that is not the colour you get. Everything below is a failure mode that
|
|
12
12
|
looked like success first.
|
|
13
13
|
|
|
14
|
-
**Read `
|
|
14
|
+
**Read `reference/` files as needed — do not read them all up front.**
|
|
15
15
|
|
|
16
16
|
| File | When |
|
|
17
17
|
| --- | --- |
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
18
|
+
| `reference/display.md` | Choosing colours, brightness, legibility; **AMOLED always-on and burn-in** |
|
|
19
|
+
| `reference/layout.md` | Positioning anything; content clipped, overlapping, or off-screen |
|
|
20
|
+
| `reference/testing.md` | Writing tests; a suspiciously clean test run |
|
|
21
|
+
| `reference/simulator.md` | Screenshots, settings not applying, monkeydo hanging |
|
|
22
|
+
| `reference/devices.md` | Adding device support, launcher icons, API levels |
|
|
23
|
+
| `reference/store.md` | Publishing, listing copy, IP questions |
|
|
24
|
+
| `reference/publishing.md` | Driving the store portal in a browser; upload/update flow, validator rejections |
|
|
25
25
|
|
|
26
26
|
## Tools
|
|
27
27
|
|
|
28
28
|
Run these rather than reinventing them. All are standalone.
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
bin/ciq-doctor # toolchain check: SDK, JDK, key, devices
|
|
32
|
+
bin/ciq-devices # survey installed devices by resolution
|
|
33
|
+
bin/ciq-devices --same-as fenix6pro # products you can add with no code change
|
|
34
|
+
bin/ciq-capture out.png # calibrated simulator screenshot
|
|
35
|
+
bin/ciq-capture out.png --face --size 260 # cropped + masked to the round display
|
|
36
|
+
bin/ciq-calibrate # re-derive the display rect if capture looks wrong
|
|
37
|
+
bin/ciq-release # pre-submission check: package, screenshots, icon, keys, copy
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
`bin/ciq-release` is what you run before opening the store portal. Every check
|
|
41
|
+
in it is something otherwise discovered halfway through the submission form --
|
|
42
|
+
a stale screenshot set, an icon still copied from the last project, or copy
|
|
43
|
+
containing a character the description validator rejects.
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
`bin/ciq-capture` exists because `screencapture -R` grabs a screen *region*, not
|
|
46
46
|
a window: without a frontmost check it silently photographs whatever is on top,
|
|
47
47
|
and the window moves between simulator restarts. Both failure modes produce a
|
|
48
48
|
plausible PNG of the wrong thing.
|
|
49
49
|
|
|
50
|
-
## The
|
|
50
|
+
## The seven things that will bite you
|
|
51
51
|
|
|
52
52
|
### 1. `make test` can compile zero tests and report success
|
|
53
53
|
|
|
@@ -57,7 +57,7 @@ get `BUILD SUCCESSFUL` and a green run with nothing compiled — even when the t
|
|
|
57
57
|
files reference symbols that no longer exist.
|
|
58
58
|
|
|
59
59
|
Fix: a second jungle passed as an additional `-f`. See
|
|
60
|
-
|
|
60
|
+
`templates/monkey.test.jungle` and the `test` target in `templates/Makefile`.
|
|
61
61
|
|
|
62
62
|
**Prove it before you trust it.** Put a deliberately unresolvable symbol in one
|
|
63
63
|
test and confirm the build fails:
|
|
@@ -78,6 +78,13 @@ they look. Measured on fenix 6 Pro:
|
|
|
78
78
|
| `FONT_SMALL` | 32 |
|
|
79
79
|
| `FONT_NUMBER_MEDIUM` | 74 |
|
|
80
80
|
|
|
81
|
+
**Font tiers already scale with the device.** `FONT_XTINY` is a tier, not a
|
|
82
|
+
pixel height: a 454px watch supplies a proportionately taller glyph than a
|
|
83
|
+
260px one, unasked. So when text looks wrong at a new resolution, the bug is a
|
|
84
|
+
LENGTH that failed to scale, never the font. Do not add screen-size branching
|
|
85
|
+
to pick a bigger tier -- doing so double-scales, and labels end up wider than
|
|
86
|
+
the containers naming them.
|
|
87
|
+
|
|
81
88
|
Content drawn past the screen height is simply invisible — no error, no warning,
|
|
82
89
|
no clipping indicator. A two-line `FONT_NUMBER_MEDIUM` block is 148px of a 260px
|
|
83
90
|
face.
|
|
@@ -92,7 +99,7 @@ function clampRuleY(derived as Number, footerH as Number) as Number {
|
|
|
92
99
|
}
|
|
93
100
|
```
|
|
94
101
|
|
|
95
|
-
See `
|
|
102
|
+
See `reference/layout.md`.
|
|
96
103
|
|
|
97
104
|
### 3. The screen is round; your layout is not
|
|
98
105
|
|
|
@@ -121,7 +128,7 @@ simulator's backlit LCD.
|
|
|
121
128
|
Corollary: a saturated colour on a glyph reflects only its own channel, making
|
|
122
129
|
the thing you want to read the *dimmest* thing on screen.
|
|
123
130
|
|
|
124
|
-
See `
|
|
131
|
+
See `reference/display.md`.
|
|
125
132
|
|
|
126
133
|
### 5. The simulator lies about settings
|
|
127
134
|
|
|
@@ -132,14 +139,59 @@ settings code.
|
|
|
132
139
|
|
|
133
140
|
Reset also drops the loaded device, so relaunch and re-push afterwards.
|
|
134
141
|
|
|
135
|
-
See `
|
|
142
|
+
See `reference/simulator.md`.
|
|
143
|
+
|
|
144
|
+
### 6. On AMOLED, the face you designed is the one that fails review
|
|
145
|
+
|
|
146
|
+
`requiresBurnInProtection` devices must show a restricted always-on frame
|
|
147
|
+
between wrist raises. The trap is that the *stronger* your face's identity —
|
|
148
|
+
a bright panel, a filled dial — the worse a dimmed version of it performs,
|
|
149
|
+
because it still lights most of the screen. The always-on frame has to be a
|
|
150
|
+
different drawing: outlines where there were fills, and shifted a few pixels on
|
|
151
|
+
a cycle so no pixel is driven continuously.
|
|
152
|
+
|
|
153
|
+
Also note the flag can be **null** on older products, and a null propagating
|
|
154
|
+
into a `Boolean` field throws at the first wrist drop.
|
|
155
|
+
|
|
156
|
+
See the AMOLED section of `reference/display.md`.
|
|
157
|
+
|
|
158
|
+
### 7. A watch face CAN have settings on the watch
|
|
159
|
+
|
|
160
|
+
`AppBase.getSettingsView()` has existed since **API 3.2.0** and the SDK
|
|
161
|
+
documents it as "only applicable to watch faces and data fields". Plenty of
|
|
162
|
+
store copy — including, at one point, this author's own — claims settings are
|
|
163
|
+
reachable only from the phone. They are not.
|
|
164
|
+
|
|
165
|
+
The override signature must include `or Null` or the compiler rejects it as
|
|
166
|
+
narrowing:
|
|
167
|
+
|
|
168
|
+
```monkeyc
|
|
169
|
+
function getSettingsView() as
|
|
170
|
+
[WatchUi.Views] or [WatchUi.Views, WatchUi.InputDelegates] or Null {
|
|
171
|
+
return [new SettingsMenu(), new SettingsMenuDelegate()];
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Two things to get right in the menu itself:
|
|
176
|
+
|
|
177
|
+
- `ToggleMenuItem` has **already flipped its own state** by the time `onSelect`
|
|
178
|
+
runs. Read `isEnabled()`; negating the stored value inverts the setting.
|
|
179
|
+
- A picker should `setFocus()` the current choice, not open at the top of a long
|
|
180
|
+
list. If the list filters out unavailable options, item position is *not* the
|
|
181
|
+
option id — count the focus row as you build the list.
|
|
182
|
+
|
|
183
|
+
Keep one module that owns every property read, each wrapped with a default, and
|
|
184
|
+
have both the phone path and the on-watch menu go through it. Two readers with
|
|
185
|
+
two sets of defaults is exactly how the watch and the phone come to disagree
|
|
186
|
+
about what "off" means — and check the fallbacks actually match
|
|
187
|
+
`properties.xml`, because nothing enforces that.
|
|
136
188
|
|
|
137
189
|
## Workflow
|
|
138
190
|
|
|
139
191
|
### Starting a face
|
|
140
192
|
|
|
141
|
-
1.
|
|
142
|
-
2. Copy
|
|
193
|
+
1. `bin/ciq-doctor` — confirm SDK, JDK, developer key, target device installed.
|
|
194
|
+
2. Copy `templates/Makefile`, `templates/monkey.jungle`, `templates/monkey.test.jungle`.
|
|
143
195
|
3. Generate a fresh app id: `python3 -c "import uuid;print(uuid.uuid4().hex)"`.
|
|
144
196
|
4. Split source by responsibility. This structure has held up well:
|
|
145
197
|
|
|
@@ -168,7 +220,7 @@ Capture and *look at it*. Layout bugs are invisible in a passing test run:
|
|
|
168
220
|
|
|
169
221
|
```bash
|
|
170
222
|
make build && make sim
|
|
171
|
-
|
|
223
|
+
bin/ciq-capture /tmp/face.png --face --size 260
|
|
172
224
|
```
|
|
173
225
|
|
|
174
226
|
Then Read the PNG. Every layout bug in this skill's history was found by looking,
|
|
@@ -201,7 +253,7 @@ are what makes it recognisable:
|
|
|
201
253
|
- **Where the legends sit** — maker's name on the bezel, not the glass.
|
|
202
254
|
|
|
203
255
|
No system font is a segment display. If you need one, draw it: see
|
|
204
|
-
`
|
|
256
|
+
`reference/layout.md` for a working seven-segment renderer, including the ghost
|
|
205
257
|
(unlit) segments that are most of what sells the effect.
|
|
206
258
|
|
|
207
|
-
**Do not print a real brand on the face.** See `
|
|
259
|
+
**Do not print a real brand on the face.** See `reference/store.md`.
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<p><strong>Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.</strong></p>
|
|
4
4
|
<p>
|
|
5
5
|
<img src="https://img.shields.io/badge/license-MIT-16a34a" alt="MIT license">
|
|
6
|
-
<img src="https://img.shields.io/badge/skills-
|
|
6
|
+
<img src="https://img.shields.io/badge/skills-40-2563eb" alt="40 skills">
|
|
7
7
|
<img src="https://img.shields.io/badge/platforms-Codex%20%7C%20Claude%20%7C%20Cursor%20%7C%20Grok%20%7C%20Copilot%20%7C%20Windsurf%20%7C%20Kiro-111827" alt="Codex Claude Cursor Grok Copilot Windsurf Kiro">
|
|
8
8
|
<img src="https://img.shields.io/badge/status-public%20catalog-16a34a" alt="Public catalog">
|
|
9
9
|
</p>
|
|
@@ -139,11 +139,11 @@ packages/{category}/{skill}/SKILL.md
|
|
|
139
139
|
|
|
140
140
|
</details>
|
|
141
141
|
|
|
142
|
-
## All
|
|
142
|
+
## All 40 Skills
|
|
143
143
|
|
|
144
144
|
Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup name in a new agent session.
|
|
145
145
|
|
|
146
|
-
### Software development (
|
|
146
|
+
### Software development (35)
|
|
147
147
|
|
|
148
148
|
| Skill | What it does | Use when |
|
|
149
149
|
|-------|-------------|----------|
|
|
@@ -160,6 +160,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
|
|
|
160
160
|
| [geminiloop](packages/software-development/geminiloop/SKILL.md) | Iteratively drives a GitHub PR to zero unresolved Gemini Code Assist comments, treating each as a claim to verify — fixing the correct ones and rebutting the rest with evidence | Clearing a Gemini Code Assist review whose findings need checking first |
|
|
161
161
|
| [gh-cli](packages/software-development/gh-cli/SKILL.md) | Guides GitHub CLI usage for repos, PRs, Actions, releases, issues, and all related GitHub operations | Working with GitHub from the command line and needing reliable `gh` commands |
|
|
162
162
|
| [git-commit](packages/software-development/git-commit/SKILL.md) | Creates conventional commits with diff-aware staging and message generation | Asking to commit changes or wanting a conventional commit message from the current diff |
|
|
163
|
+
| [lekker-review](packages/software-development/lekker-review/SKILL.md) | Runs a FAANG-quality PR review in an isolated worktree: 5 parallel specialist agents, adversarial finding verification, proof-of-bug tests for Criticals, and an optional --fix mode that applies and commits its own findings (Claude Code only — needs the Workflow tool) | Reviewing a GitHub PR beyond what a single-pass review or a bot reviewer catches |
|
|
163
164
|
| [macos-menubar-app](packages/software-development/macos-menubar-app/SKILL.md) | Builds a production-quality macOS menubar or notch app in SwiftUI — MenuBarExtra setup, sandbox entitlements, keyboard shortcuts, sound effects | Building a native macOS utility that lives in the menu bar or Dynamic Island notch |
|
|
164
165
|
| [mvp-oneshot](packages/software-development/mvp-oneshot/SKILL.md) | Takes a rough product idea and produces a scoped, testable MVP plan and initial implementation in a single pass | Going from idea to a shippable one-week MVP without losing scope |
|
|
165
166
|
| [obsidian-pr-sync](packages/software-development/obsidian-pr-sync/SKILL.md) | Fetches open GitHub PRs assigned to you or requesting review and writes a grouped age-sorted section into today's Obsidian daily note | Syncing GitHub review queue to Obsidian at the start of the day or on demand |
|
|
@@ -181,6 +182,10 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
|
|
|
181
182
|
| [pr-to-green](packages/software-development/pr-to-green/SKILL.md) | Orchestrates a GitHub PR from first push to merge-ready: runs ci-fix-loop until checks are green, detects active AI review bots, runs qodoloop and coderabbitloop in sequence, and confirms zero unresolved threads | Driving a PR to merge-ready in one pass without manually chaining the fix loops |
|
|
182
183
|
| [dependabot-triage](packages/software-development/dependabot-triage/SKILL.md) | Triages open Dependabot and Renovate PRs in bulk: classifies by risk tier, auto-approves safe patch bumps, flags breaking major upgrades for human review, and posts a digest | Clearing a backlog of dependency update PRs during a maintenance window |
|
|
183
184
|
| [store-listing-copy](packages/software-development/store-listing-copy/SKILL.md) | Generates platform-validated App Store, Google Play, and Connect IQ store listing copy (title, subtitle, description, what's new, keywords) from a git changelog | Writing store copy before submitting to apple-store-submit or the garmin-watchface store workflow |
|
|
185
|
+
| [pr-finalize-complete](packages/software-development/pr-finalize-complete/SKILL.md) | Comprehensive PR finalization for branches that may already be partially addressed: checks each review comment's actual current status in code, distinguishes fixed vs. stale vs. still-present findings, verifies test coverage, and runs real lint/test gates | Confirming a PR is genuinely merge-ready when review tools show findings that may already be fixed |
|
|
186
|
+
| [morning-routine](packages/software-development/morning-routine/SKILL.md) | Runs the complete start-of-day setup in one pass: rolls over unfinished Obsidian tasks, syncs open GitHub PRs into today's daily note, and sweeps safe Dependabot patch bumps | Starting the workday by chaining obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage in sequence |
|
|
187
|
+
| [release-day](packages/software-development/release-day/SKILL.md) | Orchestrates a full release-day workflow for iOS, Android, or Garmin apps: verifies CI is green, generates a changelog, drafts store listing copy, triggers semantic-release or tags manually, waits for the build, and queues the App Store submission | Cutting a release from "code is ready" to "build submitted" in one orchestrated pass |
|
|
188
|
+
| [branch-cleanup](packages/software-development/branch-cleanup/SKILL.md) | Prunes stale git branches after a merge wave: deletes closed/merged remote branches, removes local tracking refs that no longer exist on the remote, and optionally cleans up merged local branches | Tidying up after a Dependabot triage batch merge or a sprint wind-down |
|
|
184
189
|
|
|
185
190
|
### Marketing (2)
|
|
186
191
|
|
|
@@ -205,7 +210,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
|
|
|
205
210
|
|
|
206
211
|
| Skill | What it does | Use when |
|
|
207
212
|
|-------|-------------|----------|
|
|
208
|
-
| [garmin-watchface](packages/wearables/garmin-watchface/SKILL.md) |
|
|
213
|
+
| [garmin-watchface](packages/wearables/garmin-watchface/SKILL.md) | Designs, builds, tests, screenshots, and publishes Garmin Connect IQ watch faces in Monkey C | Working on a Connect IQ watch face — SVG design proposals, inspiration gathering, layout that clips or overlaps, simulator screenshots, app settings, device support, or store submission |
|
|
209
214
|
|
|
210
215
|
## How to use skills
|
|
211
216
|
|