@ericrisco/rsc 0.1.34 → 0.1.36
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/README.md +28 -2
- package/manifest.json +241 -2
- package/package.json +1 -1
- package/scripts/lib/domains.js +1 -0
- package/scripts/lib/recommend.js +4 -0
- package/skills/agent-eval/SKILL.md +1 -1
- package/skills/analyze/SKILL.md +1 -1
- package/skills/brand-voice/SKILL.md +1 -1
- package/skills/brand-voice/references/voice-guide-template.md +14 -0
- package/skills/building-agents/SKILL.md +2 -2
- package/skills/competitor-watch/SKILL.md +9 -4
- package/skills/competitor-watch/references/tracker-schema.md +19 -0
- package/skills/constitution/references/constitution-template.md +10 -0
- package/skills/content-engine/SKILL.md +1 -1
- package/skills/content-engine/references/brief-and-pipeline.md +15 -1
- package/skills/course-builder/references/grounding-and-scoping.md +23 -0
- package/skills/course-storytelling/references/learner-grounding.md +22 -2
- package/skills/decision-records/SKILL.md +14 -1
- package/skills/decision-records/references/templates.md +20 -0
- package/skills/design/references/brand-grounding.md +11 -1
- package/skills/game-design/SKILL.md +170 -0
- package/skills/game-design/evals/README.md +13 -0
- package/skills/game-design/evals/cases.yaml +47 -0
- package/skills/game-design/references/mechanics-and-loops.md +78 -0
- package/skills/game-design/references/playtesting-and-scope.md +58 -0
- package/skills/game-design/references/progression-and-economy.md +70 -0
- package/skills/game-storytelling/SKILL.md +159 -0
- package/skills/game-storytelling/evals/README.md +28 -0
- package/skills/game-storytelling/evals/cases.yaml +51 -0
- package/skills/game-storytelling/references/branching-and-state.md +134 -0
- package/skills/game-storytelling/references/dialogue-tools.md +117 -0
- package/skills/game-storytelling/references/environmental-storytelling.md +71 -0
- package/skills/gamedev-multiplayer/SKILL.md +250 -0
- package/skills/gamedev-multiplayer/evals/README.md +12 -0
- package/skills/gamedev-multiplayer/evals/cases.yaml +44 -0
- package/skills/gamedev-multiplayer/references/godot-high-level-multiplayer.md +133 -0
- package/skills/gamedev-multiplayer/references/prediction-and-latency.md +104 -0
- package/skills/gamedev-multiplayer/references/unity-and-unreal-netcode.md +166 -0
- package/skills/gamedev-pathing/SKILL.md +242 -0
- package/skills/gamedev-pathing/evals/README.md +14 -0
- package/skills/gamedev-pathing/evals/cases.yaml +49 -0
- package/skills/gamedev-pathing/references/navmesh-workflow.md +110 -0
- package/skills/gamedev-pathing/references/search-algorithms.md +135 -0
- package/skills/gamedev-pathing/references/steering-and-avoidance.md +120 -0
- package/skills/gamedev-physics/SKILL.md +225 -0
- package/skills/gamedev-physics/evals/README.md +12 -0
- package/skills/gamedev-physics/evals/cases.yaml +54 -0
- package/skills/gamedev-physics/references/character-controllers.md +120 -0
- package/skills/gamedev-physics/references/determinism-and-queries.md +124 -0
- package/skills/gamedev-physics/references/layers-and-masks.md +115 -0
- package/skills/gamedev-shaders/SKILL.md +252 -0
- package/skills/gamedev-shaders/evals/README.md +14 -0
- package/skills/gamedev-shaders/evals/cases.yaml +45 -0
- package/skills/gamedev-shaders/references/effect-recipes.md +205 -0
- package/skills/gamedev-shaders/references/godot-shading-language.md +133 -0
- package/skills/gamedev-shaders/references/unity-and-unreal-shaders.md +169 -0
- package/skills/gamedev-shipping/SKILL.md +236 -0
- package/skills/gamedev-shipping/evals/README.md +9 -0
- package/skills/gamedev-shipping/evals/cases.yaml +55 -0
- package/skills/gamedev-shipping/references/mobile-and-desktop.md +127 -0
- package/skills/gamedev-shipping/references/stores-and-ci.md +162 -0
- package/skills/gamedev-shipping/references/web-export-headers.md +140 -0
- package/skills/godot/SKILL.md +319 -0
- package/skills/godot/evals/README.md +13 -0
- package/skills/godot/evals/cases.yaml +50 -0
- package/skills/godot/references/export-and-testing.md +102 -0
- package/skills/godot/references/gdscript-style.md +84 -0
- package/skills/godot/references/godot3-to-4-traps.md +89 -0
- package/skills/godot/references/nodes-scenes-resources.md +109 -0
- package/skills/harness/SKILL.md +3 -3
- package/skills/harness/references/daily-curation-automation.md +8 -6
- package/skills/harness/references/obsidian-scaffolding.md +16 -9
- package/skills/harness/references/wiki-article-template.md +31 -14
- package/skills/harness/references/wiki-index-template.md +7 -3
- package/skills/harness/references/wiki-protocol.md +120 -54
- package/skills/harness/references/wiki-worklog-template.md +5 -1
- package/skills/instagram-api/SKILL.md +8 -1
- package/skills/instagram-api/references/insights-metrics.md +8 -1
- package/skills/knowledge-ops/SKILL.md +9 -9
- package/skills/knowledge-ops/evals/cases.yaml +1 -1
- package/skills/knowledge-ops/references/gardening-playbook.md +18 -8
- package/skills/level-design/SKILL.md +175 -0
- package/skills/level-design/evals/README.md +35 -0
- package/skills/level-design/evals/cases.yaml +58 -0
- package/skills/level-design/references/blockout-to-art.md +118 -0
- package/skills/level-design/references/guidance-and-readability.md +152 -0
- package/skills/level-design/references/pacing-and-encounters.md +142 -0
- package/skills/linkedin-api/SKILL.md +10 -1
- package/skills/linkedin-strategy/SKILL.md +12 -0
- package/skills/linkedin-strategy/references/wiki-records.md +27 -1
- package/skills/marketing/references/brand-grounding.md +22 -2
- package/skills/medium-strategy/SKILL.md +12 -0
- package/skills/medium-strategy/references/wiki-records.md +39 -1
- package/skills/medium-writing/SKILL.md +19 -0
- package/skills/plan/references/plan-template.md +12 -1
- package/skills/roast-me/tools/adapters/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/base.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/claude.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/codex.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/gemini.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/registry.cpython-312.pyc +0 -0
- package/skills/shortform-packaging/SKILL.md +7 -2
- package/skills/shortform-packaging/references/package-templates.md +13 -2
- package/skills/shortform-strategy/SKILL.md +30 -6
- package/skills/shortform-strategy/references/learning-loop-template.md +9 -1
- package/skills/specify/references/spec-template.md +12 -1
- package/skills/tiktok-api/SKILL.md +6 -2
- package/skills/tiktok-api/references/wiki-schema.md +38 -4
- package/skills/unity/SKILL.md +282 -0
- package/skills/unity/evals/README.md +8 -0
- package/skills/unity/evals/cases.yaml +43 -0
- package/skills/unity/references/build-and-platforms.md +65 -0
- package/skills/unity/references/input-system.md +102 -0
- package/skills/unity/references/lifecycle-deep-dive.md +75 -0
- package/skills/unreal/SKILL.md +270 -0
- package/skills/unreal/evals/README.md +12 -0
- package/skills/unreal/evals/cases.yaml +45 -0
- package/skills/unreal/references/blueprint-cpp-parity.md +109 -0
- package/skills/unreal/references/gameplay-framework.md +95 -0
- package/skills/unreal/references/packaging.md +83 -0
- package/skills/verify/SKILL.md +11 -1
- package/skills/youtube-api/SKILL.md +7 -2
- package/skills/youtube-api/references/wiki-schema.md +25 -4
- package/skills/youtube-packaging/SKILL.md +10 -2
- package/skills/youtube-packaging/references/description-and-chapters.md +70 -2
- package/skills/youtube-strategy/SKILL.md +9 -2
- package/skills/youtube-strategy/references/wiki-records.md +39 -6
- package/skills/youtube-strategy/scripts/verify.sh +4 -0
- package/skills/youtube-thumbnails/SKILL.md +10 -5
- package/skills/youtube-thumbnails/references/experiment-log-format.md +28 -2
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
██ ██ ███████ ███████
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
# `rsc` —
|
|
15
|
+
# `rsc` — 242 agent skills, one CLI, zero bloat
|
|
16
16
|
|
|
17
17
|
**A self-recommending skill catalog for 17 coding assistants** — Claude Code,
|
|
18
18
|
Codex, GitHub Copilot, Cursor, Gemini, Windsurf, Cline, Antigravity, Zed and more.
|
|
@@ -243,7 +243,7 @@ just asks in plain language.
|
|
|
243
243
|
|
|
244
244
|
## The catalog
|
|
245
245
|
|
|
246
|
-
|
|
246
|
+
243 skills, grouped by what you're trying to do. Click any skill to read its
|
|
247
247
|
`SKILL.md`. It fires on its own when a task matches.
|
|
248
248
|
|
|
249
249
|
### 🧭 Core & control plane
|
|
@@ -256,6 +256,26 @@ The front door and the workspace brain.
|
|
|
256
256
|
> self-improving wiki. It governs software *or* a whole company. **orient** is the
|
|
257
257
|
> always-on compass that keeps a non-technical human oriented after every step.
|
|
258
258
|
|
|
259
|
+
> #### 📦 The `02-DOCS/` brain is now 100% Open Knowledge Format (OKF v0.1) conformant
|
|
260
|
+
>
|
|
261
|
+
> Google Cloud published the [**Open Knowledge Format**](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf)
|
|
262
|
+
> — a vendor-neutral standard for portable, agent-readable knowledge — built on the
|
|
263
|
+
> same Karpathy *LLM-wiki* pattern our `02-DOCS/` engine has used from day one. We
|
|
264
|
+
> independently converged on the same design, so adopting the standard cost almost
|
|
265
|
+
> nothing. As of now, **every `02-DOCS/wiki/` is a valid, portable OKF bundle**:
|
|
266
|
+
>
|
|
267
|
+
> - **Markdown + YAML frontmatter**, `type` on every concept doc, OKF-standard
|
|
268
|
+
> fields (`title`, `description`, `resource`, `tags`, `timestamp`).
|
|
269
|
+
> - **Standard markdown links** (not wikilinks) form the knowledge graph — any OKF
|
|
270
|
+
> consumer reads it, *and* it stays a native Obsidian vault (graph, backlinks,
|
|
271
|
+
> Properties, Bases). Same files, no export step.
|
|
272
|
+
> - **Reserved files** honored: `index.md` (no frontmatter) for navigation,
|
|
273
|
+
> `log.md` (newest-first, ISO 8601) for history.
|
|
274
|
+
>
|
|
275
|
+
> Tarball a `wiki/` and any OKF tool — including Google's own viewer — can read it.
|
|
276
|
+
> And the brain now **keeps your repo clean**: a loose file it ingests (a PDF at the
|
|
277
|
+
> root, anything in `inbox/`) is *moved* into `raw/`, never left as clutter.
|
|
278
|
+
|
|
259
279
|
### 📐 Spec-Driven Development
|
|
260
280
|
Take a fuzzy intent to a shipped, verified change — phase by phase. `npx @ericrisco/rsc install --profile core`.
|
|
261
281
|
|
|
@@ -306,6 +326,12 @@ Each with a `02-DOCS` feedback loop that learns from your own results. `remotion
|
|
|
306
326
|
|
|
307
327
|
[fastapi](skills/fastapi/) · [nextjs](skills/nextjs/) · [react](skills/react/) · [react-native](skills/react-native/) · [vue-nuxt](skills/vue-nuxt/) · [angular](skills/angular/) · [svelte](skills/svelte/) · [astro](skills/astro/) · [solid-js](skills/solid-js/) · [htmx](skills/htmx/) · [nodejs](skills/nodejs/) · [nestjs](skills/nestjs/) · [django](skills/django/) · [laravel](skills/laravel/) · [rails](skills/rails/) · [spring-boot](skills/spring-boot/) · [phoenix](skills/phoenix/) · [flutter](skills/flutter/) · [swift-ios](skills/swift-ios/) · [kotlin-android](skills/kotlin-android/) · [compose-multiplatform](skills/compose-multiplatform/) · [expo](skills/expo/) · [tauri](skills/tauri/) · [electron](skills/electron/) · [rust](skills/rust/) · [wordpress](skills/wordpress/) · [shopify](skills/shopify/) · [no-code-app](skills/no-code-app/) · [chrome-extension](skills/chrome-extension/) · [api-design](skills/api-design/)
|
|
308
328
|
|
|
329
|
+
### 🎮 Game development
|
|
330
|
+
|
|
331
|
+
Three engines + engine-agnostic disciplines. Every engine skill pins the current version and bans deprecated APIs, so the agent stops emitting stale Godot-3 / legacy-Unity code.
|
|
332
|
+
|
|
333
|
+
[godot](skills/godot/) · [unity](skills/unity/) · [unreal](skills/unreal/) · [game-design](skills/game-design/) · [game-storytelling](skills/game-storytelling/) · [level-design](skills/level-design/) · [gamedev-shaders](skills/gamedev-shaders/) · [gamedev-multiplayer](skills/gamedev-multiplayer/) · [gamedev-physics](skills/gamedev-physics/) · [gamedev-pathing](skills/gamedev-pathing/) · [gamedev-shipping](skills/gamedev-shipping/)
|
|
334
|
+
|
|
309
335
|
### 🗄️ Databases & data layer
|
|
310
336
|
|
|
311
337
|
[postgresdb](skills/postgresdb/) · [mysql](skills/mysql/) · [mongodb](skills/mongodb/) · [redis](skills/redis/) · [supabase](skills/supabase/) · [neon](skills/neon/) · [planetscale](skills/planetscale/) · [sqlite-turso](skills/sqlite-turso/) · [prisma-orm](skills/prisma-orm/) · [drizzle-orm](skills/drizzle-orm/) · [firebase](skills/firebase/) · [dynamodb](skills/dynamodb/) · [vector-db](skills/vector-db/) · [clickhouse-analytics](skills/clickhouse-analytics/) · [duckdb](skills/duckdb/) · [db-migrations](skills/db-migrations/) · [backups](skills/backups/)
|
package/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.1.
|
|
2
|
+
"version": "0.1.36",
|
|
3
3
|
"counts": {
|
|
4
|
-
"skills":
|
|
4
|
+
"skills": 243
|
|
5
5
|
},
|
|
6
6
|
"skills": [
|
|
7
7
|
{
|
|
@@ -1737,6 +1737,156 @@
|
|
|
1737
1737
|
],
|
|
1738
1738
|
"profiles": []
|
|
1739
1739
|
},
|
|
1740
|
+
{
|
|
1741
|
+
"id": "game-design",
|
|
1742
|
+
"description": "Use when designing or repairing the design of a game — inventing mechanics and systems, shaping the core loop, layering moment-to-moment / session / meta loops, planning progression, economy, currencies and sinks/faucets, tuning difficulty curves and balance, killing dominant strategies, adding 'juice'/game feel as design intent, prototyping and playtesting, or controlling scope, and especially when the ask is 'why isn't my game fun'. Triggers: 'design the core loop', 'my game isn't fun / doesn't hook', 'balance the economy', 'the difficulty curve feels off', 'players found a dominant strategy', 'how do I scope this', 'reward / progression loop', 'diseñar la mecánica', 'el juego no engancha', 'com equilibro l'economia'. NOT writing engine code, scripts or shaders (route to godot/unity/unreal), NOT narrative, dialogue or story beats (route to game-storytelling), NOT level layout or encounter placement (route to level-design).",
|
|
1743
|
+
"tags": [
|
|
1744
|
+
"game-design",
|
|
1745
|
+
"mechanics",
|
|
1746
|
+
"core-loop",
|
|
1747
|
+
"balancing",
|
|
1748
|
+
"progression",
|
|
1749
|
+
"playtesting",
|
|
1750
|
+
"scope",
|
|
1751
|
+
"fun"
|
|
1752
|
+
],
|
|
1753
|
+
"recommends": [
|
|
1754
|
+
"level-design",
|
|
1755
|
+
"game-storytelling",
|
|
1756
|
+
"godot",
|
|
1757
|
+
"unity",
|
|
1758
|
+
"unreal"
|
|
1759
|
+
],
|
|
1760
|
+
"profiles": [
|
|
1761
|
+
"full"
|
|
1762
|
+
]
|
|
1763
|
+
},
|
|
1764
|
+
{
|
|
1765
|
+
"id": "game-storytelling",
|
|
1766
|
+
"description": "Use when designing a game's STORY as an interactive system: premise, theme and narrative pillars; branching narrative and meaningful choice; dialogue trees with state and flags; quests, objectives and fail states; worldbuilding; environmental and systemic storytelling; and keeping story in harmony with play (avoiding ludonarrative dissonance). Engine-agnostic — it designs the narrative graph, variables and beats, then hands the wiring to the engine skill. Triggers: 'write my game's story/premise', 'branching narrative', 'dialogue system/tree', 'quest structure', 'worldbuilding', 'meaningful choices', 'illusion of choice', 'Ink/Yarn Spinner/Twine/articy narrative', 'story keeps fighting the gameplay'. NOT core mechanics, systems or balance (that's game-design); NOT spatial/level layout or encounter placement (that's level-design); NOT the actual dialogue-node code, save format or plugin wiring inside an engine (that's godot/unity/unreal).",
|
|
1767
|
+
"tags": [
|
|
1768
|
+
"game",
|
|
1769
|
+
"narrative",
|
|
1770
|
+
"story",
|
|
1771
|
+
"dialogue",
|
|
1772
|
+
"quest",
|
|
1773
|
+
"branching",
|
|
1774
|
+
"worldbuilding"
|
|
1775
|
+
],
|
|
1776
|
+
"recommends": [
|
|
1777
|
+
"game-design",
|
|
1778
|
+
"level-design"
|
|
1779
|
+
],
|
|
1780
|
+
"profiles": [
|
|
1781
|
+
"full"
|
|
1782
|
+
]
|
|
1783
|
+
},
|
|
1784
|
+
{
|
|
1785
|
+
"id": "gamedev-multiplayer",
|
|
1786
|
+
"description": "Use when adding multiplayer, netcode, or replication to a game — syncing players/state across a network, online co-op or PvP, client-server vs peer-to-peer, server-authoritative design, client-side prediction + server reconciliation, snapshot interpolation, lag compensation, tick/netrate, and per-engine wiring: Godot 4.x MultiplayerSpawner/MultiplayerSynchronizer/@rpc/ENetMultiplayerPeer/set_multiplayer_authority, Unity Netcode for GameObjects (NetworkObject/NetworkBehaviour/NetworkVariable/[Rpc]/ServerRpc/ClientRpc), Unreal Actor replication (Replicated/ReplicatedUsing, Server/Client/NetMulticast RPCs, relevancy). Triggers: 'how do I sync players', 'client and server desync', 'players rubber-band or teleport', 'who has authority', 'laggy movement', 'cheater set their own health'. NOT single-player gameplay, AI, or input (route to engine skill godot/unity/unreal), and NOT matchmaking, dedicated-server hosting, or backend infra (route to deployment).",
|
|
1787
|
+
"tags": [
|
|
1788
|
+
"multiplayer",
|
|
1789
|
+
"netcode",
|
|
1790
|
+
"replication",
|
|
1791
|
+
"networking",
|
|
1792
|
+
"prediction",
|
|
1793
|
+
"authority"
|
|
1794
|
+
],
|
|
1795
|
+
"recommends": [
|
|
1796
|
+
"godot",
|
|
1797
|
+
"unity",
|
|
1798
|
+
"unreal",
|
|
1799
|
+
"gamedev-physics"
|
|
1800
|
+
],
|
|
1801
|
+
"profiles": [
|
|
1802
|
+
"full"
|
|
1803
|
+
]
|
|
1804
|
+
},
|
|
1805
|
+
{
|
|
1806
|
+
"id": "gamedev-pathing",
|
|
1807
|
+
"description": "Use when implementing AI navigation or pathfinding in a game - moving enemies/NPCs/units toward goals, \\\"how do enemies navigate the level\\\", A*/Dijkstra/JPS/HPA* search, choosing grid vs waypoint-graph vs navmesh, baking a navmesh and tuning agent radius/height, off-mesh/nav links, dynamic obstacles and re-baking, steering (seek/flee/arrive/pursue/wander/path-following/flocking), local avoidance (RVO/ORCA, crowds), and flow fields for many agents to one goal. Per-engine: Godot 4.x (NavigationServer2D/3D, NavigationRegion, NavigationAgent, get_next_path_position), Unity (NavMeshAgent + NavMeshObstacle + AI Navigation baking), Unreal (RecastNavMesh + AIController + Behavior Trees/EQS). Triggers: \\\"my enemies get stuck\\\", \\\"units clump together\\\", \\\"navmesh not updating\\\", \\\"agentes se atascan\\\". NOT physics/rigidbody collision response or character-controller tuning (gamedev-physics), and NOT high-level enemy AI behaviour design like aggro/states/difficulty (game-design).",
|
|
1808
|
+
"tags": [
|
|
1809
|
+
"pathfinding",
|
|
1810
|
+
"navmesh",
|
|
1811
|
+
"navigation",
|
|
1812
|
+
"steering",
|
|
1813
|
+
"a-star"
|
|
1814
|
+
],
|
|
1815
|
+
"recommends": [
|
|
1816
|
+
"godot",
|
|
1817
|
+
"unity",
|
|
1818
|
+
"unreal",
|
|
1819
|
+
"gamedev-physics"
|
|
1820
|
+
],
|
|
1821
|
+
"profiles": [
|
|
1822
|
+
"full"
|
|
1823
|
+
]
|
|
1824
|
+
},
|
|
1825
|
+
{
|
|
1826
|
+
"id": "gamedev-physics",
|
|
1827
|
+
"description": "Use when working with a game engine's physics — rigid bodies, colliders, collision layers/masks, character controllers, joints, forces vs impulses, raycasts/shapecasts, or when physics is unstable. Triggers: \\\"my character falls through the floor\\\", \\\"bullet tunnels through walls at high speed\\\", \\\"rigidbody jitters / vibrates / explodes\\\", \\\"objects that should collide pass through each other\\\", \\\"which collision layer and mask do I set\\\", \\\"kinematic vs dynamic body\\\", \\\"move_and_slide / CharacterBody\\\", \\\"AddForce vs impulse vs setting velocity\\\", \\\"physics in FixedUpdate or _physics_process\\\", \\\"slope and step detection\\\", \\\"trigger / Area overlap not firing\\\", Godot RigidBody/StaticBody/CharacterBody/Area, Unity Rigidbody/Collider/CharacterController, Unreal Chaos/collision presets. NOT rendering, materials, or visual jitter from shaders (use gamedev-shaders); NOT AI navigation, pathfinding, or navmesh (use gamedev-pathing).",
|
|
1828
|
+
"tags": [
|
|
1829
|
+
"physics",
|
|
1830
|
+
"collision",
|
|
1831
|
+
"rigidbody",
|
|
1832
|
+
"character-controller",
|
|
1833
|
+
"colliders"
|
|
1834
|
+
],
|
|
1835
|
+
"recommends": [
|
|
1836
|
+
"godot",
|
|
1837
|
+
"unity",
|
|
1838
|
+
"unreal",
|
|
1839
|
+
"gamedev-pathing"
|
|
1840
|
+
],
|
|
1841
|
+
"profiles": [
|
|
1842
|
+
"full"
|
|
1843
|
+
]
|
|
1844
|
+
},
|
|
1845
|
+
{
|
|
1846
|
+
"id": "gamedev-shaders",
|
|
1847
|
+
"description": "Use when writing shaders, materials, VFX, or post-processing for a game engine, or asking \\\"how do I make this effect\\\" — covers the vertex→fragment pipeline, UVs / normals / coordinate spaces, and per-engine authoring in Godot 4.x (shader_type spatial/canvas_item/particles, source_color, hint_screen_texture, ShaderMaterial), Unity 6 (Shader Graph vs HLSL, URP/HDRP, ShaderLab), and Unreal 5.x (Material graph, material domains, Custom HLSL node). Includes recipes for dissolve, rim/outline, toon/cel, water/flow, force field, hologram; full-screen post-process; and shader performance (overdraw, texture-sample cost, branching, mobile). Triggers: \\\"write a dissolve shader\\\", \\\"rim light\\\", \\\"toon shading\\\", \\\"screen-space effect\\\", \\\"my shader is slow on mobile\\\", \\\"cómo hago un shader de agua\\\". NOT gameplay or engine-API code (→ godot / unity / unreal) and NOT physics simulation, collision, or rigid bodies (→ gamedev-physics).",
|
|
1848
|
+
"tags": [
|
|
1849
|
+
"shaders",
|
|
1850
|
+
"vfx",
|
|
1851
|
+
"materials",
|
|
1852
|
+
"post-processing",
|
|
1853
|
+
"shadergraph"
|
|
1854
|
+
],
|
|
1855
|
+
"recommends": [
|
|
1856
|
+
"godot",
|
|
1857
|
+
"unity",
|
|
1858
|
+
"unreal",
|
|
1859
|
+
"gamedev-shipping"
|
|
1860
|
+
],
|
|
1861
|
+
"profiles": [
|
|
1862
|
+
"full"
|
|
1863
|
+
]
|
|
1864
|
+
},
|
|
1865
|
+
{
|
|
1866
|
+
"id": "gamedev-shipping",
|
|
1867
|
+
"description": "Use when exporting, building, packaging, or publishing a game — per engine (Godot export templates, Unity Build Profiles, Unreal Shipping vs Development) and per platform: desktop (Windows/macOS/Linux; macOS codesign + notarytool notarization), web (the COOP same-origin + COEP require-corp headers threaded SharedArrayBuffer WebAssembly builds need, and that Godot's C#/.NET edition can't export to web), mobile (Android JDK 17 build template, AAB vs APK, release keystore; iOS provisioning). Also store prep (icons/splash, metadata, age ratings, AAB for Play, Mac App Store, Steamworks/SteamPipe, itch.io butler), headless-export CI/CD, build/version numbers, and ship-time size/startup optimization. Triggers: 'export my game', 'build for Steam', 'ship to web/mobile', 'publish to the Play Store', 'notarize my Mac build', 'itch.io upload', 'SharedArrayBuffer is not defined'. NOT for writing gameplay/runtime code (that's the engine skill — godot/unity/unreal) or hosting a normal web app/API/container (→ deployment).",
|
|
1868
|
+
"tags": [
|
|
1869
|
+
"export",
|
|
1870
|
+
"build",
|
|
1871
|
+
"release",
|
|
1872
|
+
"packaging",
|
|
1873
|
+
"store",
|
|
1874
|
+
"steam",
|
|
1875
|
+
"itch",
|
|
1876
|
+
"notarization",
|
|
1877
|
+
"webassembly",
|
|
1878
|
+
"aab"
|
|
1879
|
+
],
|
|
1880
|
+
"recommends": [
|
|
1881
|
+
"godot",
|
|
1882
|
+
"unity",
|
|
1883
|
+
"unreal",
|
|
1884
|
+
"deployment"
|
|
1885
|
+
],
|
|
1886
|
+
"profiles": [
|
|
1887
|
+
"full"
|
|
1888
|
+
]
|
|
1889
|
+
},
|
|
1740
1890
|
{
|
|
1741
1891
|
"id": "gcp-essentials",
|
|
1742
1892
|
"description": "Use when running a small product on the core of Google Cloud with the gcloud CLI: creating a project, deploying a container to Cloud Run, standing up a Cloud Storage bucket, a managed Cloud SQL Postgres/MySQL, and wiring them together with least-privilege IAM. Triggers: 'deploy to Cloud Run', 'gcloud run deploy', 'set up a GCP project', 'crear bucket en GCP', 'desplegar a Cloud Run', 'service account sin claves JSON', 'why is my Cloud Run running as the default service account', 'connect Cloud Run to Cloud SQL', 'turn off the bucket public access'. NOT AWS (that is aws-essentials).",
|
|
@@ -1845,6 +1995,29 @@
|
|
|
1845
1995
|
],
|
|
1846
1996
|
"profiles": []
|
|
1847
1997
|
},
|
|
1998
|
+
{
|
|
1999
|
+
"id": "godot",
|
|
2000
|
+
"description": "Use when writing, reviewing, or debugging Godot 4.x games in GDScript (typed) or C# — nodes/scenes/custom Resources, autoload singletons and an EventBus, signals via Callable, @onready/@export/@tool, static typing, CharacterBody2D/3D + velocity + move_and_slide(), _process vs _physics_process, .tscn/.tres text formats, and headless GUT/gdUnit4 tests. Enforces Godot 4 APIs and rejects Godot 3 leftovers: yield→await, onready→@onready, .instance()→.instantiate(), KinematicBody→CharacterBody, Spatial→Node3D, string connect(\\\"sig\\\",obj,\\\"m\\\")→Callable. Triggers: 'write a Godot player controller', 'my move_and_slide does nothing', 'port this Godot 3 script to 4', 'connect a signal in Godot', 'GDScript won't type-check', 'CharacterBody2D won't move', 'add an autoload', 'escribe un script de Godot', 'por qué no se mueve mi personaje'. NOT Unity MonoBehaviour or Unreal (route to unity/unreal); NOT pure C++/CMake tooling unrelated to GDExtension (that is cpp); NOT shader code in .gdshader (that is gamedev-shaders).",
|
|
2001
|
+
"tags": [
|
|
2002
|
+
"godot",
|
|
2003
|
+
"gdscript",
|
|
2004
|
+
"game-dev",
|
|
2005
|
+
"csharp",
|
|
2006
|
+
"godot4"
|
|
2007
|
+
],
|
|
2008
|
+
"recommends": [
|
|
2009
|
+
"gamedev-shaders",
|
|
2010
|
+
"gamedev-multiplayer",
|
|
2011
|
+
"gamedev-physics",
|
|
2012
|
+
"gamedev-pathing",
|
|
2013
|
+
"gamedev-shipping",
|
|
2014
|
+
"game-design",
|
|
2015
|
+
"cpp"
|
|
2016
|
+
],
|
|
2017
|
+
"profiles": [
|
|
2018
|
+
"full"
|
|
2019
|
+
]
|
|
2020
|
+
},
|
|
1848
2021
|
{
|
|
1849
2022
|
"id": "google-workspace",
|
|
1850
2023
|
"description": "Use when building server-side automation that reads or writes Gmail, Drive, Calendar, or Sheets against a real Google Workspace account via the official client libraries and a GCP service account — picking the auth mode, scoping OAuth scopes, building the authed client, and debugging 403/429/unauthorized_client errors. Triggers: 'send mail from a service account in a cron', 'unauthorized_client when impersonating a user', 'which Drive scope to upload to a shared drive', 'set up domain-wide delegation client ID', 'getting 403 insufficient permissions from the Sheets API', 'automatizar Gmail con cuenta de servicio sin login del usuario', 'enviar correos desde un script sense login d'usuari'. NOT generic SMTP/marketing/deliverability email (that is email-connector).",
|
|
@@ -2289,6 +2462,26 @@
|
|
|
2289
2462
|
],
|
|
2290
2463
|
"profiles": []
|
|
2291
2464
|
},
|
|
2465
|
+
{
|
|
2466
|
+
"id": "level-design",
|
|
2467
|
+
"description": "Use when designing a game level, map, arena, or encounter — laying out a blockout/greybox, fixing pacing that drags or spikes, guiding players without hand-holding, placing secrets and rewards, or diagnosing a level that plays as boring, confusing, or where players get lost or stuck. Engine-agnostic craft: the blockout->greybox->playtest->art pipeline, sightlines and landmarks, tension/release rhythm, the introduce->develop->twist->combine encounter progression, readability via light/color/composition, and traversal heatmaps. Triggers: 'design this level', 'my level is boring/confusing', 'players keep getting lost', 'how do I pace this', 'blockout', 'greybox', 'encounter design', 'where do I put the secret'. NOT systemic mechanics or economy tuning (that's game-design), NOT narrative or story beats (that's game-storytelling), and NOT engine-specific level tooling — nav meshes, occlusion, tilemap editors, lightmap baking (that's the godot/unity/unreal skill).",
|
|
2468
|
+
"tags": [
|
|
2469
|
+
"level-design",
|
|
2470
|
+
"blockout",
|
|
2471
|
+
"pacing",
|
|
2472
|
+
"encounter",
|
|
2473
|
+
"playtest"
|
|
2474
|
+
],
|
|
2475
|
+
"recommends": [
|
|
2476
|
+
"game-design",
|
|
2477
|
+
"godot",
|
|
2478
|
+
"unity",
|
|
2479
|
+
"unreal"
|
|
2480
|
+
],
|
|
2481
|
+
"profiles": [
|
|
2482
|
+
"full"
|
|
2483
|
+
]
|
|
2484
|
+
},
|
|
2292
2485
|
{
|
|
2293
2486
|
"id": "linkedin-api",
|
|
2294
2487
|
"description": "Use when wiring an app to LinkedIn's organic Posts / Community Management API — completing 3-legged OAuth, publishing text/article/document posts to a member profile or company page, or pulling impressions/engagement/follower stats and logging them as a durable feedback record. Triggers: 'connect our app to the LinkedIn Posts API', 'publish to our company page programmatically', 'pull last month's impressions for our org posts', 'my /v2/ugcPosts call returns 403', 'unauthorized scope w_organization_social at consent', 'log post performance into the wiki', 'publica a la pàgina de LinkedIn per API', 'conectar la API de LinkedIn y traer las impresiones'. NOT writing the post copy (that is linkedin-content), planning cadence (that is linkedin-strategy), or DM sequences (that is linkedin-outreach).",
|
|
@@ -4474,6 +4667,52 @@
|
|
|
4474
4667
|
],
|
|
4475
4668
|
"profiles": []
|
|
4476
4669
|
},
|
|
4670
|
+
{
|
|
4671
|
+
"id": "unity",
|
|
4672
|
+
"description": "Use when writing, reviewing, or structuring Unity game code in C# for current Unity 6 LTS (6000.x) — GameObjects and Transform hierarchy, MonoBehaviour lifecycle, prefabs and prefab variants, ScriptableObjects for data, scenes and additive loading, the new Input System, coroutines vs async/await/Awaitable, Addressables, and build/player settings for 2D and 3D. Triggers: 'my Unity script', 'Awake vs Start', 'why is my physics jittery', MonoBehaviour .cs files, 'set up the new Input System', 'ScriptableObject config', 'load a scene additively', 'Instantiate a prefab', 'convert Input.GetAxis to the new system', 'build for Android/WebGL', 'por qué no se llama mi Start', 'com carrego una escena en additiu'. NOT Godot/GDScript (that is godot); NOT Unreal/Blueprint/C++ engine work (that is unreal); NOT the netcode wire protocol itself (that is gamedev-multiplayer).",
|
|
4673
|
+
"tags": [
|
|
4674
|
+
"unity",
|
|
4675
|
+
"csharp",
|
|
4676
|
+
"game-dev",
|
|
4677
|
+
"monobehaviour",
|
|
4678
|
+
"input-system"
|
|
4679
|
+
],
|
|
4680
|
+
"recommends": [
|
|
4681
|
+
"gamedev-multiplayer",
|
|
4682
|
+
"gamedev-physics",
|
|
4683
|
+
"gamedev-shaders",
|
|
4684
|
+
"gamedev-pathing",
|
|
4685
|
+
"gamedev-shipping",
|
|
4686
|
+
"godot",
|
|
4687
|
+
"unreal"
|
|
4688
|
+
],
|
|
4689
|
+
"profiles": [
|
|
4690
|
+
"full"
|
|
4691
|
+
]
|
|
4692
|
+
},
|
|
4693
|
+
{
|
|
4694
|
+
"id": "unreal",
|
|
4695
|
+
"description": "Use when building, scripting, or debugging a game in Unreal Engine 5 (UE5) with Blueprint and/or C++ — gameplay framework (Actor/Pawn/Character/GameMode/PlayerController), Actor lifecycle and tick, UPROPERTY/UFUNCTION/UCLASS reflection and garbage collection, Enhanced Input, dynamic multicast delegates, UMG widgets, Paper2D sprites/flipbooks, and Blueprint↔C++ parity (exposing C++ to Blueprint, calling Blueprint from C++). Triggers: \\\"UE5\\\", \\\"Unreal\\\", \\\"Blueprint\\\", \\\"make a Character in C++\\\", \\\"expose this to Blueprint\\\", \\\"BlueprintCallable\\\", \\\"why is my UObject garbage collected\\\", \\\"Enhanced Input mapping context\\\", \\\"UMG widget\\\", \\\"Paper2D flipbook\\\", \\\".uproject\\\", \\\"GameMode vs GameState\\\". NOT for Godot (→ godot), NOT for Unity/C#/MonoBehaviour (→ unity), NOT for language-only C++ memory/RAII questions with no Unreal types (→ cpp).",
|
|
4696
|
+
"tags": [
|
|
4697
|
+
"unreal",
|
|
4698
|
+
"ue5",
|
|
4699
|
+
"blueprint",
|
|
4700
|
+
"unreal-engine",
|
|
4701
|
+
"gamedev"
|
|
4702
|
+
],
|
|
4703
|
+
"recommends": [
|
|
4704
|
+
"cpp",
|
|
4705
|
+
"gamedev-shipping",
|
|
4706
|
+
"gamedev-multiplayer",
|
|
4707
|
+
"game-design",
|
|
4708
|
+
"gamedev-physics",
|
|
4709
|
+
"godot",
|
|
4710
|
+
"unity"
|
|
4711
|
+
],
|
|
4712
|
+
"profiles": [
|
|
4713
|
+
"full"
|
|
4714
|
+
]
|
|
4715
|
+
},
|
|
4477
4716
|
{
|
|
4478
4717
|
"id": "vector-db",
|
|
4479
4718
|
"description": "Use when operating a vector store as a data layer — choosing or migrating between Pinecone, Qdrant, Weaviate, or pgvector; designing a collection/index (distance metric, dimensions, HNSW m/ef_construction, named vectors); filtering on metadata/payload; running hybrid dense+sparse search; or picking quantization to cut RAM and cost. Symptoms: search returns garbage, filters get silently ignored, recall is low, queries are slow, the bill is too high, a filtered query returns fewer than k rows. Triggers: 'set up a vector database', 'my similarity search ignores the metadata filter', 'ef_search vs recall', 'move off Pinecone to pgvector to cut cost', 'hybrid search with RRF', 'why does my filtered query return fewer than k results', 'crear una colección en Qdrant con cuantización binaria', 'la cerca vectorial retorna resultats dolents'. NOT how to produce, chunk, or judge embeddings (that is embeddings-search).",
|
package/package.json
CHANGED
package/scripts/lib/domains.js
CHANGED
|
@@ -17,6 +17,7 @@ export const DOMAINS = [
|
|
|
17
17
|
{ title: 'AI — run it on', ids: ['replicate', 'runpod', 'modal', 'huggingface', 'ollama', 'together-fireworks', 'fal'] },
|
|
18
18
|
{ title: 'Languages', ids: ['typescript', 'python', 'java', 'csharp-dotnet', 'php', 'ruby', 'cpp', 'elixir', 'bash-scripting', 'sql', 'go'] },
|
|
19
19
|
{ title: 'Frameworks & app stacks', ids: ['fastapi', 'nextjs', 'react', 'react-native', 'vue-nuxt', 'angular', 'svelte', 'astro', 'solid-js', 'htmx', 'nodejs', 'nestjs', 'django', 'laravel', 'rails', 'spring-boot', 'phoenix', 'flutter', 'swift-ios', 'kotlin-android', 'compose-multiplatform', 'expo', 'tauri', 'electron', 'rust', 'wordpress', 'shopify', 'no-code-app', 'chrome-extension', 'api-design'] },
|
|
20
|
+
{ title: 'Game development', ids: ['godot', 'unity', 'unreal', 'game-design', 'game-storytelling', 'level-design', 'gamedev-shaders', 'gamedev-multiplayer', 'gamedev-physics', 'gamedev-pathing', 'gamedev-shipping'] },
|
|
20
21
|
{ title: 'Databases & data layer', ids: ['postgresdb', 'mysql', 'mongodb', 'redis', 'supabase', 'neon', 'planetscale', 'sqlite-turso', 'prisma-orm', 'drizzle-orm', 'firebase', 'dynamodb', 'vector-db', 'clickhouse-analytics', 'duckdb', 'db-migrations', 'backups'] },
|
|
21
22
|
{ title: 'Ship & operate — platforms', ids: ['vercel', 'netlify', 'cloudflare', 'railway', 'render', 'fly-io', 'coolify', 'hetzner', 'digitalocean', 'aws-essentials', 'gcp-essentials'] },
|
|
22
23
|
{ title: 'Ship & operate — devops', ids: ['docker', 'github-actions', 'git-workflow', 'domains-dns', 'monitoring', 'email-deliverability', 'scaling', 'deployment'] },
|
package/scripts/lib/recommend.js
CHANGED
|
@@ -16,6 +16,10 @@ const OUTCOMES = {
|
|
|
16
16
|
'building-agents': 'Your own AI agent',
|
|
17
17
|
'secure-coding': 'Make it secure',
|
|
18
18
|
deployment: 'Put it online',
|
|
19
|
+
godot: 'Your game (Godot)',
|
|
20
|
+
unity: 'Your game (Unity)',
|
|
21
|
+
unreal: 'Your game (Unreal)',
|
|
22
|
+
'game-design': "Design a game that's fun",
|
|
19
23
|
};
|
|
20
24
|
|
|
21
25
|
export function hasOutcome(id) {
|
|
@@ -199,7 +199,7 @@ Pick by where the eval runs and what it must do. Versions as of 2026-06 — re-v
|
|
|
199
199
|
|
|
200
200
|
## Project grounding
|
|
201
201
|
|
|
202
|
-
If the workspace has a `02-DOCS/` harness, record the eval policy in `02-DOCS/wiki/stack/evals.md`: dataset location, scorer mix, gate baseline file, judge model, and the failure modes covered. Index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer). This is **recorded, not gated** — skip silently if there is no harness.
|
|
202
|
+
If the workspace has a `02-DOCS/` harness, record the eval policy in `02-DOCS/wiki/stack/evals.md`: dataset location, scorer mix, gate baseline file, judge model, and the failure modes covered. Write it as an OKF v0.1 wiki article per the harness [`wiki-article-template.md`](../harness/references/wiki-article-template.md): open with YAML frontmatter carrying a non-empty `type:` (use `type: stack`), `timestamp` in ISO 8601, and standard markdown links — never wikilinks. Index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer). This is **recorded, not gated** — skip silently if there is no harness.
|
|
203
203
|
|
|
204
204
|
## verify.sh
|
|
205
205
|
|
package/skills/analyze/SKILL.md
CHANGED
|
@@ -112,7 +112,7 @@ Produce a single consistency report:
|
|
|
112
112
|
3. **Findings table** — `# | Severity | Type | Artifact A (loc) | Artifact B (loc) | Conflict | Resolve in (phase)`.
|
|
113
113
|
4. **Recommended routing** — group fixes by the phase that owns them (`clarify` for spec ambiguity, `plan` for missing architecture, `tasks` for a missing done-check, `constitution` if a principle itself is wrong).
|
|
114
114
|
|
|
115
|
-
Write the report to `02-DOCS/wiki/sdd/analysis/<slug>.md` (create the dir if absent) and index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer) under the `sdd/` topic, so the next phase and the harness can find it. The report is the artifact analyze owns — it is the *only* thing analyze writes. Per-run point-in-time; overwrite on re-run, the wiki keeps history.
|
|
115
|
+
Write the report to `02-DOCS/wiki/sdd/analysis/<slug>.md` (create the dir if absent) and index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer) under the `sdd/` topic, so the next phase and the harness can find it. It is an OKF v0.1 wiki article: open it with YAML frontmatter carrying a non-empty `type:` (use `type: analysis`), a `timestamp` in ISO 8601, and standard markdown links — never wikilinks. The report is the artifact analyze owns — it is the *only* thing analyze writes. Per-run point-in-time; overwrite on re-run, the wiki keeps history.
|
|
116
116
|
|
|
117
117
|
Adapt the rendered verbosity to the dial (L0 = table only; L3 = full walk-through). Do not log a decision to `decisions.md` — analyze decides nothing; the phase that resolves the finding logs its own decision.
|
|
118
118
|
|
|
@@ -150,7 +150,7 @@ Tone by context: onboarding=warm; error=plain+reassuring, no humor;
|
|
|
150
150
|
success=light warmth, no hype; billing=precise+calm; legal=formal+exact.
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
**Persist it.** Write the compiled guide under `02-DOCS/wiki/brand/voice-guide.md` and the voice-DNA block beside it, per the `harness` Karpathy-wiki convention (compiled brand articles under `02-DOCS/wiki/brand/`, raw user inputs under `02-DOCS/raw/brand/`). This is the exact study `marketing`, `landing-copy`, and `content-engine` read to ground their copy. A guide in a slide deck is invisible to them.
|
|
153
|
+
**Persist it.** Write the compiled guide under `02-DOCS/wiki/brand/voice-guide.md` and the voice-DNA block beside it, per the `harness` Karpathy-wiki convention (compiled brand articles under `02-DOCS/wiki/brand/`, raw user inputs under `02-DOCS/raw/brand/`). The persisted file is an OKF v0.1 wiki article: open it with YAML frontmatter carrying a non-empty `type:` (use `type: brand-voice`) — see the frontmatter block in [`references/voice-guide-template.md`](references/voice-guide-template.md). This is the exact study `marketing`, `landing-copy`, and `content-engine` read to ground their copy. A guide in a slide deck is invisible to them.
|
|
154
154
|
|
|
155
155
|
## Auditing for drift
|
|
156
156
|
|
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
Fill every slot. Delete the instruction lines in italics before you ship. The finished file lives at `02-DOCS/wiki/brand/voice-guide.md`. A fully worked mini-example follows the blank template — copy its shape, not its content.
|
|
4
4
|
|
|
5
|
+
The persisted guide is an OKF v0.1 wiki article: it MUST open with YAML frontmatter carrying a non-empty `type`. Copy the block below verbatim to the top of `02-DOCS/wiki/brand/voice-guide.md`, fill the values, and set `timestamp` to the ISO 8601 datetime of the edit:
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
---
|
|
9
|
+
type: brand-voice
|
|
10
|
+
title: <brand> — Voice & Tone Guide
|
|
11
|
+
description: How the <brand> brand sounds — traits, rules, dimensions, word bank, and AI voice-DNA.
|
|
12
|
+
tags: [brand-voice, tone-of-voice, voice-guide]
|
|
13
|
+
timestamp: YYYY-MM-DDTHH:MM:SSZ
|
|
14
|
+
topic: brand
|
|
15
|
+
status: stable
|
|
16
|
+
---
|
|
17
|
+
```
|
|
18
|
+
|
|
5
19
|
---
|
|
6
20
|
|
|
7
21
|
## Blank template
|
|
@@ -454,9 +454,9 @@ agent inherits the conventions instead of re-deriving them.
|
|
|
454
454
|
|
|
455
455
|
1. **Find the article** `02-DOCS/wiki/stack/agents.md`, indexed in `02-DOCS/wiki/index.md` (the Knowledge map index; root `CLAUDE.md` points to it).
|
|
456
456
|
2. **If missing or stale**, create/update it with the project's real choices — the provider(s) and model routing, where the provider adapter lives, tool/RAG conventions, the eval gates, and the observability backend —
|
|
457
|
-
then index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer to it).
|
|
457
|
+
then index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer to it). Write it as an OKF v0.1 wiki article per the harness [`wiki-article-template.md`](../harness/references/wiki-article-template.md): open with YAML frontmatter carrying a non-empty `type:` (use `type: stack`), and use standard markdown links — never wikilinks.
|
|
458
458
|
3. **Read it first on every use** and stay consistent; when a convention changes, update the
|
|
459
|
-
article (bump its `
|
|
459
|
+
article (bump its `timestamp`) in the same change.
|
|
460
460
|
|
|
461
461
|
No `02-DOCS/` layer? Skip silently (optionally suggest `harness`). Unlike the
|
|
462
462
|
brand study, technical conventions are *recorded, not gated* — never block the task on this.
|
|
@@ -122,10 +122,15 @@ Good: 2026-05-20 · pricing · Acme · acme.com/pricing
|
|
|
122
122
|
## The tracker artifacts
|
|
123
123
|
|
|
124
124
|
Three structured files. Required fields named here; full schema + a filled end-to-end example
|
|
125
|
-
competitor live in `references/tracker-schema.md`.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
competitor live in `references/tracker-schema.md`. The profile is a `.md` page under the
|
|
126
|
+
`02-DOCS/wiki/` OKF v0.1 bundle, so its YAML frontmatter carries a non-empty `type: competitor`
|
|
127
|
+
(plus the OKF-recommended `title`/`description`/`tags`/`timestamp`) alongside the domain keys;
|
|
128
|
+
its body uses standard markdown links, never wikilinks. The two CSVs are data files, not OKF
|
|
129
|
+
documents.
|
|
130
|
+
|
|
131
|
+
- **Competitor profile** (one per rival): OKF frontmatter (`type: competitor`, …) + the domain
|
|
132
|
+
keys `name`, `positioning_line`, `segment`, pricing tiers (each with `amount`, `currency`,
|
|
133
|
+
`source_url`, `date`), feature-matrix rows, watched URLs.
|
|
129
134
|
- **Feature matrix** (CSV): rows = features, columns = competitors, each cell sourced + dated.
|
|
130
135
|
- **Change log** (CSV, append-only): `date,competitor,axis,url,old_value,new_value,materiality,action`.
|
|
131
136
|
|
|
@@ -5,12 +5,28 @@ captures (the diffed HTML/JSON snapshots) go under `02-DOCS/raw/competitors/<riv
|
|
|
5
5
|
rule that overrides everything: **a price or feature cell without a `source_url` + `date` is
|
|
6
6
|
not knowledge — leave it blank and say so.**
|
|
7
7
|
|
|
8
|
+
`02-DOCS/wiki/` is an OKF v0.1 bundle, so the one `.md` file here (the competitor profile)
|
|
9
|
+
carries YAML frontmatter with a non-empty `type:`; the two CSVs are data files, not OKF
|
|
10
|
+
documents. Any cross-references in the profile body use **standard markdown links** (e.g.
|
|
11
|
+
`[Beta](./beta.md)`), never wikilinks. See `../../harness/references/wiki-protocol.md`
|
|
12
|
+
"## Conventions".
|
|
13
|
+
|
|
8
14
|
## 1. Competitor profile (one file per rival)
|
|
9
15
|
|
|
10
16
|
Markdown front-matter + body. One per rival, named `02-DOCS/wiki/competitors/<rival>.md`.
|
|
17
|
+
The frontmatter is OKF v0.1 conformant: `type:` is the only required field (non-empty);
|
|
18
|
+
`title`/`description`/`tags`/`timestamp` are the recommended standard surface. All the
|
|
19
|
+
domain keys below (`name`, `positioning_source.date`, every `pricing_tiers[].date`, …) are
|
|
20
|
+
kept verbatim — OKF allows any extra key and `verify.sh` reads them, so adding the OKF
|
|
21
|
+
fields is purely additive.
|
|
11
22
|
|
|
12
23
|
```yaml
|
|
13
24
|
---
|
|
25
|
+
type: competitor
|
|
26
|
+
title: Acme
|
|
27
|
+
description: "Tracker of record for Acme — positioning, pricing tiers, and watched surfaces."
|
|
28
|
+
tags: [competitor, pricing-watch, feature-watch]
|
|
29
|
+
timestamp: 2026-05-28T00:00:00Z
|
|
14
30
|
name: Acme
|
|
15
31
|
positioning_line: "The all-in-one workspace for remote-first teams"
|
|
16
32
|
positioning_source: { url: "https://acme.com", date: "2026-05-28" }
|
|
@@ -28,6 +44,9 @@ pricing_tiers:
|
|
|
28
44
|
|
|
29
45
|
## Notes
|
|
30
46
|
Repositioned from "project tool" to "workspace" in Q2 2026 — see change log 2026-05-12.
|
|
47
|
+
|
|
48
|
+
## Related
|
|
49
|
+
- [Beta](./beta.md) — closest competing positioning; cross-watch their pricing moves.
|
|
31
50
|
```
|
|
32
51
|
|
|
33
52
|
Every `pricing_tiers` row and any feature claim must carry `source_url` + `date`. If you only
|
|
@@ -5,6 +5,16 @@ Render this into `02-DOCS/wiki/sdd/constitution.md`. Keep it to 1-2 screens. Eve
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
```markdown
|
|
8
|
+
---
|
|
9
|
+
type: constitution
|
|
10
|
+
title: <Project> — Constitution
|
|
11
|
+
description: The non-negotiable principles every rsc-sdd phase obeys.
|
|
12
|
+
tags: [sdd, constitution]
|
|
13
|
+
timestamp: YYYY-MM-DDTHH:MM:SSZ
|
|
14
|
+
topic: sdd
|
|
15
|
+
version: v1.0.0
|
|
16
|
+
---
|
|
17
|
+
|
|
8
18
|
# <Project> — Constitution
|
|
9
19
|
|
|
10
20
|
> Version: v1.0.0 · Ratified: YYYY-MM-DD · Last amended: YYYY-MM-DD
|
|
@@ -79,7 +79,7 @@ date,pillar,cluster,format,owner,stage,brief_link,atomization,mix
|
|
|
79
79
|
|
|
80
80
|
## The brief
|
|
81
81
|
|
|
82
|
-
A slot **cannot leave the `idea` stage without a brief.** One canonical brief format means consistent output regardless of who writes it. Required fields (inline minimum):
|
|
82
|
+
A slot **cannot leave the `idea` stage without a brief.** One canonical brief format means consistent output regardless of who writes it. The brief is a `.md` page in the `02-DOCS/wiki/` OKF v0.1 bundle: its YAML frontmatter carries a non-empty `type: content-brief` (plus the OKF-recommended `title`/`description`/`tags`/`timestamp`) alongside the domain fields below, and any body cross-references use standard markdown links, never wikilinks. Required fields (inline minimum):
|
|
83
83
|
|
|
84
84
|
- **objective** — the one outcome this piece drives.
|
|
85
85
|
- **persona** — which of the 2–4 you target.
|
|
@@ -8,6 +8,13 @@ template, the stage gates, and the CSV column docs you fill in.
|
|
|
8
8
|
Every slot carries one brief in the same shape. A slot cannot leave the `idea` stage
|
|
9
9
|
without it. Store briefs under `02-DOCS/wiki/content/briefs/<slug>.md`.
|
|
10
10
|
|
|
11
|
+
These briefs live in the `02-DOCS/wiki/` OKF v0.1 bundle, so each brief `.md` carries YAML
|
|
12
|
+
frontmatter with a non-empty `type: content-brief` (the OKF-recommended `title`/`description`/
|
|
13
|
+
`tags`/`timestamp` are added where meaningful). The domain brief fields below are kept as-is —
|
|
14
|
+
OKF allows any extra key. Cross-references in the body use **standard markdown links**, never
|
|
15
|
+
wikilinks (e.g. `[brand voice](../brand-voice.md)`). See
|
|
16
|
+
`../../harness/references/wiki-protocol.md` "## Conventions".
|
|
17
|
+
|
|
11
18
|
| Field | Required | What goes here |
|
|
12
19
|
|---|---|---|
|
|
13
20
|
| `objective` | yes | the one outcome (e.g. "drive activation-checklist signups") |
|
|
@@ -25,6 +32,13 @@ without it. Store briefs under `02-DOCS/wiki/content/briefs/<slug>.md`.
|
|
|
25
32
|
|
|
26
33
|
```markdown
|
|
27
34
|
---
|
|
35
|
+
# OKF v0.1 standard surface — `type` is the only REQUIRED field (non-empty).
|
|
36
|
+
type: content-brief
|
|
37
|
+
title: "Onboarding activation guide — brief"
|
|
38
|
+
description: "Brief of record for the flagship activation-checklist guide."
|
|
39
|
+
tags: [content-brief, onboarding, flagship]
|
|
40
|
+
timestamp: 2026-07-01T00:00:00Z
|
|
41
|
+
# Domain brief fields (OKF allows any extra key; the pipeline + verify read these).
|
|
28
42
|
slug: onboarding-activation-guide
|
|
29
43
|
objective: drive activation-checklist signups from new-trial users
|
|
30
44
|
persona: hands-on-ops-lead
|
|
@@ -36,7 +50,7 @@ owner: ana
|
|
|
36
50
|
target_keyword: "saas user activation checklist"
|
|
37
51
|
success_metric: 100 checklist downloads in 30 days
|
|
38
52
|
atomization_intent: 10 derivatives — 3 LinkedIn, 1 X thread, 2 shorts, 1 newsletter, 3 carousels
|
|
39
|
-
voice_ref:
|
|
53
|
+
voice_ref: ../brand-voice.md
|
|
40
54
|
---
|
|
41
55
|
```
|
|
42
56
|
|
|
@@ -46,6 +46,29 @@ Reuse the learner profile if it exists rather than re-interviewing. When you wri
|
|
|
46
46
|
matrix, persist them there so `course-storytelling` can pick up the same grounding for the hand-off.
|
|
47
47
|
Note in the file that the profile is shared, so neither skill clobbers the other's section.
|
|
48
48
|
|
|
49
|
+
Each persisted `02-DOCS/wiki/teaching/*.md` file is an OKF v0.1 wiki article: open it with YAML
|
|
50
|
+
frontmatter carrying a non-empty `type:` (`type: course-outline`), then the H1 and body. Use standard
|
|
51
|
+
markdown links between articles (`[Outcomes](./<course>-outcomes.md)`), never wikilinks. Mirror the
|
|
52
|
+
harness `wiki-article-template.md` shape:
|
|
53
|
+
|
|
54
|
+
```markdown
|
|
55
|
+
---
|
|
56
|
+
type: course-outline
|
|
57
|
+
title: <Course> — Outcomes
|
|
58
|
+
description: The measurable, ABCD-complete learning outcomes for <course>.
|
|
59
|
+
tags: [course, learning-outcomes]
|
|
60
|
+
timestamp: YYYY-MM-DDTHH:MM:SSZ
|
|
61
|
+
topic: teaching
|
|
62
|
+
status: stable
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
# <Course> — Outcomes
|
|
66
|
+
|
|
67
|
+
> Sources: {user interview, YYYY-MM-DD}
|
|
68
|
+
|
|
69
|
+
...
|
|
70
|
+
```
|
|
71
|
+
|
|
49
72
|
## Right-sizing scope by format
|
|
50
73
|
|
|
51
74
|
The single most common failure is too many outcomes for the time. Honest ceilings:
|