@grant-vine/wunderkind 0.5.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/README.md +191 -47
  3. package/agents/brand-builder.md +52 -3
  4. package/agents/ciso.md +53 -3
  5. package/agents/creative-director.md +37 -2
  6. package/agents/data-analyst.md +208 -0
  7. package/agents/devrel-wunderkind.md +225 -0
  8. package/agents/fullstack-wunderkind.md +51 -1
  9. package/agents/legal-counsel.md +222 -0
  10. package/agents/marketing-wunderkind.md +59 -3
  11. package/agents/operations-lead.md +51 -1
  12. package/agents/product-wunderkind.md +57 -1
  13. package/agents/qa-specialist.md +51 -1
  14. package/agents/support-engineer.md +200 -0
  15. package/commands/docs-index.md +44 -0
  16. package/dist/agents/brand-builder.d.ts.map +1 -1
  17. package/dist/agents/brand-builder.js +53 -3
  18. package/dist/agents/brand-builder.js.map +1 -1
  19. package/dist/agents/ciso.d.ts.map +1 -1
  20. package/dist/agents/ciso.js +54 -3
  21. package/dist/agents/ciso.js.map +1 -1
  22. package/dist/agents/creative-director.d.ts.map +1 -1
  23. package/dist/agents/creative-director.js +37 -2
  24. package/dist/agents/creative-director.js.map +1 -1
  25. package/dist/agents/data-analyst.d.ts +8 -0
  26. package/dist/agents/data-analyst.d.ts.map +1 -0
  27. package/dist/agents/data-analyst.js +247 -0
  28. package/dist/agents/data-analyst.js.map +1 -0
  29. package/dist/agents/devrel-wunderkind.d.ts +8 -0
  30. package/dist/agents/devrel-wunderkind.d.ts.map +1 -0
  31. package/dist/agents/devrel-wunderkind.js +262 -0
  32. package/dist/agents/devrel-wunderkind.js.map +1 -0
  33. package/dist/agents/docs-config.d.ts +14 -0
  34. package/dist/agents/docs-config.d.ts.map +1 -0
  35. package/dist/agents/docs-config.js +82 -0
  36. package/dist/agents/docs-config.js.map +1 -0
  37. package/dist/agents/docs-index-plan.d.ts +28 -0
  38. package/dist/agents/docs-index-plan.d.ts.map +1 -0
  39. package/dist/agents/docs-index-plan.js +118 -0
  40. package/dist/agents/docs-index-plan.js.map +1 -0
  41. package/dist/agents/fullstack-wunderkind.d.ts.map +1 -1
  42. package/dist/agents/fullstack-wunderkind.js +52 -1
  43. package/dist/agents/fullstack-wunderkind.js.map +1 -1
  44. package/dist/agents/index.d.ts +4 -0
  45. package/dist/agents/index.d.ts.map +1 -1
  46. package/dist/agents/index.js +4 -0
  47. package/dist/agents/index.js.map +1 -1
  48. package/dist/agents/legal-counsel.d.ts +8 -0
  49. package/dist/agents/legal-counsel.d.ts.map +1 -0
  50. package/dist/agents/legal-counsel.js +260 -0
  51. package/dist/agents/legal-counsel.js.map +1 -0
  52. package/dist/agents/marketing-wunderkind.d.ts.map +1 -1
  53. package/dist/agents/marketing-wunderkind.js +61 -3
  54. package/dist/agents/marketing-wunderkind.js.map +1 -1
  55. package/dist/agents/operations-lead.d.ts.map +1 -1
  56. package/dist/agents/operations-lead.js +52 -1
  57. package/dist/agents/operations-lead.js.map +1 -1
  58. package/dist/agents/product-wunderkind.d.ts.map +1 -1
  59. package/dist/agents/product-wunderkind.js +57 -1
  60. package/dist/agents/product-wunderkind.js.map +1 -1
  61. package/dist/agents/qa-specialist.d.ts.map +1 -1
  62. package/dist/agents/qa-specialist.js +52 -1
  63. package/dist/agents/qa-specialist.js.map +1 -1
  64. package/dist/agents/support-engineer.d.ts +8 -0
  65. package/dist/agents/support-engineer.d.ts.map +1 -0
  66. package/dist/agents/support-engineer.js +238 -0
  67. package/dist/agents/support-engineer.js.map +1 -0
  68. package/dist/build-agents.js +5 -1
  69. package/dist/build-agents.js.map +1 -1
  70. package/dist/cli/cli-installer.d.ts +9 -1
  71. package/dist/cli/cli-installer.d.ts.map +1 -1
  72. package/dist/cli/cli-installer.js +61 -2
  73. package/dist/cli/cli-installer.js.map +1 -1
  74. package/dist/cli/config-manager/index.d.ts +17 -1
  75. package/dist/cli/config-manager/index.d.ts.map +1 -1
  76. package/dist/cli/config-manager/index.js +423 -114
  77. package/dist/cli/config-manager/index.js.map +1 -1
  78. package/dist/cli/docs-output-helper.d.ts +11 -0
  79. package/dist/cli/docs-output-helper.d.ts.map +1 -0
  80. package/dist/cli/docs-output-helper.js +36 -0
  81. package/dist/cli/docs-output-helper.js.map +1 -0
  82. package/dist/cli/doctor.d.ts +6 -0
  83. package/dist/cli/doctor.d.ts.map +1 -0
  84. package/dist/cli/doctor.js +131 -0
  85. package/dist/cli/doctor.js.map +1 -0
  86. package/dist/cli/index.js +120 -8
  87. package/dist/cli/index.js.map +1 -1
  88. package/dist/cli/init.d.ts +9 -0
  89. package/dist/cli/init.d.ts.map +1 -0
  90. package/dist/cli/init.js +270 -0
  91. package/dist/cli/init.js.map +1 -0
  92. package/dist/cli/tui-installer.d.ts.map +1 -1
  93. package/dist/cli/tui-installer.js +93 -292
  94. package/dist/cli/tui-installer.js.map +1 -1
  95. package/dist/cli/types.d.ts +53 -15
  96. package/dist/cli/types.d.ts.map +1 -1
  97. package/dist/cli/uninstall.d.ts +6 -0
  98. package/dist/cli/uninstall.d.ts.map +1 -0
  99. package/dist/cli/uninstall.js +64 -0
  100. package/dist/cli/uninstall.js.map +1 -0
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +41 -7
  103. package/dist/index.js.map +1 -1
  104. package/oh-my-opencode.jsonc +58 -13
  105. package/package.json +6 -3
  106. package/schemas/wunderkind.config.schema.json +67 -0
  107. package/skills/experimentation-analyst/SKILL.md +137 -0
  108. package/skills/oss-licensing-advisor/SKILL.md +141 -0
  109. package/skills/technical-writer/SKILL.md +150 -0
@@ -0,0 +1,64 @@
1
+ import color from "picocolors";
2
+ import { detectCurrentConfig, removeGlobalWunderkindConfig, removePluginFromOpenCodeConfig, } from "./config-manager/index.js";
3
+ function resolveScopes(scope, detectedScope) {
4
+ if (scope === "global")
5
+ return ["global"];
6
+ if (scope === "project")
7
+ return ["project"];
8
+ if (detectedScope === "both")
9
+ return ["project"];
10
+ if (detectedScope === "project")
11
+ return ["project"];
12
+ if (detectedScope === "global")
13
+ return ["global"];
14
+ return [];
15
+ }
16
+ export async function runUninstall(options) {
17
+ try {
18
+ const detected = detectCurrentConfig();
19
+ const targets = resolveScopes(options.scope, detected.registrationScope ?? "none");
20
+ if (targets.length === 0) {
21
+ console.log("Wunderkind plugin is not currently registered in OpenCode config.");
22
+ console.log("No changes made.");
23
+ return 0;
24
+ }
25
+ for (const target of targets) {
26
+ const result = removePluginFromOpenCodeConfig(target);
27
+ if (!result.success) {
28
+ console.error(`Failed to remove plugin from ${target} OpenCode config: ${result.error}`);
29
+ return 1;
30
+ }
31
+ if (result.changed === true) {
32
+ console.log(`${color.green("✓")} Removed plugin registration from ${target} config (${color.dim(result.configPath)})`);
33
+ }
34
+ else {
35
+ console.log(`${color.dim("- ")}Plugin registration already absent in ${target} config (${color.dim(result.configPath)})`);
36
+ }
37
+ if (target === "global") {
38
+ const globalConfigResult = removeGlobalWunderkindConfig();
39
+ if (!globalConfigResult.success) {
40
+ console.error(`Failed to remove global Wunderkind config: ${globalConfigResult.error}`);
41
+ return 1;
42
+ }
43
+ if (globalConfigResult.changed === true) {
44
+ console.log(`${color.green("✓")} Removed global Wunderkind config (${color.dim(globalConfigResult.configPath)})`);
45
+ }
46
+ else {
47
+ console.log(`${color.dim("- ")}Global Wunderkind config already absent (${color.dim(globalConfigResult.configPath)})`);
48
+ }
49
+ }
50
+ }
51
+ console.log();
52
+ console.log(color.bold("Safety note"));
53
+ console.log("Project-local customization files are intentionally left untouched for safety:");
54
+ console.log("- Project-local: .wunderkind/, AGENTS.md, .sisyphus/, docs output folders");
55
+ console.log("- Global config is removed only during global uninstall");
56
+ console.log("If you want project-local artifacts removed, delete those files manually.");
57
+ return 0;
58
+ }
59
+ catch (error) {
60
+ console.error(`Error: ${String(error)}`);
61
+ return 1;
62
+ }
63
+ }
64
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/cli/uninstall.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,QAAA,MAAM,gBAAgB,EAAE,MAmEvB,CAAC;AAEF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAKlD,QAAA,MAAM,gBAAgB,EAAE,MAsGvB,CAAC;AAEF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,23 @@
1
+ import { readProjectWunderkindConfig } from "./cli/config-manager/index.js";
2
+ const DOCS_OUTPUT_SENTINEL = "<!-- wunderkind:docs-output-start -->";
1
3
  const WunderkindPlugin = async (_input) => {
2
4
  return {
3
5
  "experimental.chat.system.transform": async (_input, output) => {
6
+ const wunderkindConfig = readProjectWunderkindConfig();
7
+ const hasDocsOutputSentinel = output.system.join("").includes(DOCS_OUTPUT_SENTINEL);
8
+ if (wunderkindConfig?.docsEnabled === true && !hasDocsOutputSentinel) {
9
+ const docsPath = wunderkindConfig.docsPath ?? "./docs";
10
+ const docHistoryMode = wunderkindConfig.docHistoryMode ?? "overwrite";
11
+ output.system.push(`
12
+ ${DOCS_OUTPUT_SENTINEL}
13
+ ## Documentation Output
14
+
15
+ When producing documentation artifacts, write files to the configured docs directory.
16
+
17
+ - docsPath: \`${docsPath}\`
18
+ - docHistoryMode: \`${docHistoryMode}\`
19
+ `.trim());
20
+ }
4
21
  output.system.push(`
5
22
  ## Wunderkind Plugin Agents (available via wunderkind:agent-name)
6
23
 
@@ -16,6 +33,10 @@ The following specialist agents are available. Delegate to them when their domai
16
33
  - \`wunderkind:qa-specialist\` — TDD, test writing, Playwright, Vitest, coverage analysis, user story review, test optimisation, security boundary testing
17
34
  - \`wunderkind:operations-lead\` — SRE/SLO, admin tooling (build-first), runbooks, incident response, observability, supportability assessment
18
35
  - \`wunderkind:ciso\` — Security architecture, OWASP, threat modelling, compliance (GDPR/CCPA/POPIA/LGPD), pen testing coordination, breach response
36
+ - \`wunderkind:devrel-wunderkind\` — Developer relations, DX audits, API documentation, tutorials, migration guides, OSS community, getting started guides
37
+ - \`wunderkind:legal-counsel\` — OSS licensing, TOS/Privacy Policy drafting, DPAs, CLAs, contract review, GDPR/CCPA legal obligations
38
+ - \`wunderkind:support-engineer\` — Bug triage, issue classification, repro steps, severity rating (P0–P3), engineering handoff, support synthesis
39
+ - \`wunderkind:data-analyst\` — Product analytics, event tracking, funnel analysis, cohort analysis, A/B experiment design, metric definitions
19
40
 
20
41
  ### Delegation Rules
21
42
 
@@ -49,18 +70,31 @@ The following specialist agents are available. Delegate to them when their domai
49
70
  #### Operations
50
71
  - Use \`wunderkind:operations-lead\` for SRE/SLO decisions, admin panel architecture (build-first bias), incident containment, runbooks, monitoring, or supportability assessment
51
72
 
73
+ #### Developer Relations
74
+ - Use \`wunderkind:devrel-wunderkind\` for API docs, tutorials, getting started guides, DX audits, migration guides, OSS community docs, technical writing, changelog drafts
75
+
76
+ #### Legal
77
+ - Use \`wunderkind:legal-counsel\` for OSS licensing, TOS/Privacy Policy, DPAs, CLAs, contract review, GDPR/CCPA legal obligations
78
+ - Escalate from legal-counsel to \`wunderkind:ciso\` when the question is about technical security controls or implementation
79
+
80
+ #### Support & Triage
81
+ - Use \`wunderkind:support-engineer\` for bug triage, issue classification, user report synthesis, severity rating, engineering handoff
82
+ - Escalate from support-engineer: confirmed bugs → fullstack-wunderkind, security vulnerabilities → ciso, P0/P1 → operations-lead
83
+
84
+ #### Data & Analytics
85
+ - Use \`wunderkind:data-analyst\` for event tracking, funnel/cohort analysis, A/B experiments, metric definitions, tracking plans
86
+ - Escalate from data-analyst: roadmap decisions → product-wunderkind, channel performance → marketing-wunderkind
87
+
52
88
  ### Project Configuration
53
89
 
54
- All agents read \`wunderkind.config.jsonc\` (project root) for:
55
- - \`region\` — adjusts platform mix, event targeting, and regulatory focus
56
- - \`industry\` — adjusts content tone and sector-specific obligations
57
- - \`primaryRegulation\` — the main data protection regulation to apply (defaults to GDPR)
58
- - \`secondaryRegulation\` — additional regulation to layer on top
90
+ Global config defines shared region, industry, and regulation context.
91
+
92
+ Project-local \`.wunderkind/wunderkind.config.jsonc\` defines:
59
93
  - \`teamCulture\` — communication style baseline: \`formal-strict\` | \`pragmatic-balanced\` | \`experimental-informal\`
60
94
  - \`orgStructure\` — \`flat\` (peer escalation) | \`hierarchical\` (CISO has hard veto on security)
61
- - \`cisoPersonality\`, \`ctoPersonality\`, \`cmoPersonality\`, \`qaPersonality\`, \`productPersonality\`, \`opsPersonality\`, \`creativePersonality\`, \`brandPersonality\` — character archetypes per agent
95
+ - \`cisoPersonality\`, \`ctoPersonality\`, \`cmoPersonality\`, \`qaPersonality\`, \`productPersonality\`, \`opsPersonality\`, \`creativePersonality\`, \`brandPersonality\`, \`devrelPersonality\`, \`legalPersonality\`, \`supportPersonality\`, \`dataAnalystPersonality\` — character archetypes per agent
62
96
 
63
- If the file is absent or fields are blank, agents default to global best practices.
97
+ If project-local soul fields are absent, agents default to packaged sane defaults.
64
98
 
65
99
  `.trim());
66
100
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAW,KAAK,EAAE,MAAM,EAAE,EAAE;IAChD,OAAO;QACL,oCAAoC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DxB,CAAC,IAAI,EAAE,CAAC,CAAC;QACN,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,MAAM,oBAAoB,GAAG,uCAAuC,CAAC;AAErE,MAAM,gBAAgB,GAAW,KAAK,EAAE,MAAM,EAAE,EAAE;IAChD,OAAO;QACL,oCAAoC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,gBAAgB,GAAG,2BAA2B,EAAE,CAAC;YACvD,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAEpF,IAAI,gBAAgB,EAAE,WAAW,KAAK,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACrE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,IAAI,QAAQ,CAAC;gBACvD,MAAM,cAAc,GAAG,gBAAgB,CAAC,cAAc,IAAI,WAAW,CAAC;gBAEtE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;EACzB,oBAAoB;;;;;gBAKN,QAAQ;sBACF,cAAc;CACnC,CAAC,IAAI,EAAE,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ExB,CAAC,IAAI,EAAE,CAAC,CAAC;QACN,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
@@ -1,21 +1,30 @@
1
1
  {
2
- // Wunderkind oh-my-opencode configuration
3
- // ─────────────────────────────────────────
4
- // This file configures how oh-my-opencode surfaces the wunderkind plugin agents.
2
+ // Wunderkind oh-my-openagent configuration (technical filename retained)
3
+ // ──────────────────────────────────────────────────────────────────────
4
+ // Upstream is branded as "oh-my-openagent", but this file is intentionally
5
+ // named "oh-my-opencode.jsonc" to match upstream technical identifiers.
5
6
  // Copy (or symlink) this file to your project's .opencode/oh-my-opencode.jsonc
6
7
  // to activate the full wunderkind agent suite with recommended settings.
7
8
  //
8
9
  // All agent names are namespaced as "wunderkind:<agent-name>" by the plugin loader.
9
10
  //
10
- // Schema: https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/dev/assets/oh-my-opencode.schema.json
11
- "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/dev/assets/oh-my-opencode.schema.json",
11
+ // Schema: https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json
12
+ "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json",
13
+
14
+ "categories": {
15
+ "quick": { "model": "anthropic/claude-haiku-4-5" },
16
+ "unspecified-low": { "model": "anthropic/claude-sonnet-4-6" },
17
+ "unspecified-high": { "model": "openai/gpt-5.4", "variant": "high" },
18
+ "writing": { "model": "google/gemini-3-flash" },
19
+ "visual-engineering": { "model": "google/gemini-3.1-pro", "variant": "high" }
20
+ },
12
21
 
13
22
  "agents": {
14
23
  // ── Marketing ──────────────────────────────────────────────────────────────
15
24
  // CMO-calibre: go-to-market, brand, content, SEO/SEM, paid media, analytics
16
25
  "wunderkind:marketing-wunderkind": {
17
26
  "mode": "primary",
18
- "model": "github-copilot/claude-sonnet-4-5",
27
+ "category": "writing",
19
28
  "color": "#FF6B35",
20
29
  "description": "CMO-calibre marketing strategist. Brand, GTM, content, SEO/SEM, paid media, analytics, PR."
21
30
  },
@@ -24,7 +33,7 @@
24
33
  // Creative Director: brand identity, design systems, UI/UX, accessibility
25
34
  "wunderkind:creative-director": {
26
35
  "mode": "primary",
27
- "model": "github-copilot/gemini-2.0-flash",
36
+ "category": "visual-engineering",
28
37
  "color": "#A855F7",
29
38
  "description": "Brand identity, design systems, UI/UX, typography, colour, accessibility, design tokens."
30
39
  },
@@ -33,7 +42,7 @@
33
42
  // VP Product-calibre: roadmaps, OKRs, PRDs, sprint planning, task decomposition
34
43
  "wunderkind:product-wunderkind": {
35
44
  "mode": "primary",
36
- "model": "github-copilot/claude-sonnet-4-5",
45
+ "category": "writing",
37
46
  "color": "#3B82F6",
38
47
  "description": "VP Product: roadmaps, OKRs, PRDs, user research, sprint planning, task decomposition."
39
48
  },
@@ -42,7 +51,7 @@
42
51
  // CTO-calibre: full-stack, DB, Vercel/Next.js, architecture, code review, AI
43
52
  "wunderkind:fullstack-wunderkind": {
44
53
  "mode": "primary",
45
- "model": "github-copilot/claude-sonnet-4-5",
54
+ "category": "unspecified-high",
46
55
  "color": "#10B981",
47
56
  "description": "CTO-calibre full-stack engineer. Frontend, backend, DB, Vercel, architecture, AI integration."
48
57
  },
@@ -51,7 +60,7 @@
51
60
  // Community strategy, thought leadership, PR, spend gating
52
61
  "wunderkind:brand-builder": {
53
62
  "mode": "primary",
54
- "model": "github-copilot/claude-sonnet-4-5",
63
+ "category": "writing",
55
64
  "color": "#F59E0B",
56
65
  "description": "Community strategy, thought leadership, PR narrative, forum targeting, ROI gating."
57
66
  },
@@ -60,7 +69,7 @@
60
69
  // TDD, test writing, Playwright/Vitest, coverage analysis, story review
61
70
  "wunderkind:qa-specialist": {
62
71
  "mode": "primary",
63
- "model": "github-copilot/claude-sonnet-4-5",
72
+ "category": "unspecified-high",
64
73
  "color": "#06B6D4",
65
74
  "description": "TDD, test writing, Playwright, Vitest, coverage analysis, user story review, security boundary testing."
66
75
  },
@@ -69,7 +78,7 @@
69
78
  // SRE/SLO, admin tooling (build-first), runbooks, incident response, observability
70
79
  "wunderkind:operations-lead": {
71
80
  "mode": "primary",
72
- "model": "github-copilot/claude-sonnet-4-5",
81
+ "category": "unspecified-high",
73
82
  "color": "#EF4444",
74
83
  "description": "SRE/SLO, admin tooling (build-first), runbooks, incident response, observability."
75
84
  },
@@ -78,9 +87,45 @@
78
87
  // CISO: security architecture, OWASP, threat modelling, compliance, pen testing
79
88
  "wunderkind:ciso": {
80
89
  "mode": "primary",
81
- "model": "github-copilot/claude-sonnet-4-5",
90
+ "category": "unspecified-high",
82
91
  "color": "#EF4444",
83
92
  "description": "CISO: security architecture, OWASP, threat modelling, GDPR/CCPA/POPIA, pen testing, breach response."
93
+ },
94
+
95
+ // ── DevRel ──────────────────────────────────────────────────────────────────
96
+ // Developer relations, DX, API docs, tutorials, migration guides, OSS community
97
+ "wunderkind:devrel-wunderkind": {
98
+ "mode": "primary",
99
+ "category": "writing",
100
+ "color": "#8B5CF6",
101
+ "description": "Developer relations, DX, API docs, tutorials, migration guides, OSS community, getting started guides."
102
+ },
103
+
104
+ // ── Legal ────────────────────────────────────────────────────────────────────
105
+ // OSS licensing, TOS, privacy policy, DPAs, CLAs, contract review, GDPR/CCPA obligations
106
+ "wunderkind:legal-counsel": {
107
+ "mode": "primary",
108
+ "category": "writing",
109
+ "color": "#6366F1",
110
+ "description": "OSS licensing, TOS, privacy policy, DPAs, CLAs, contract review, GDPR/CCPA compliance obligations."
111
+ },
112
+
113
+ // ── Support ──────────────────────────────────────────────────────────────────
114
+ // Bug triage, issue classification, repro steps, severity rating, engineering handoff
115
+ "wunderkind:support-engineer": {
116
+ "mode": "primary",
117
+ "category": "writing",
118
+ "color": "#F97316",
119
+ "description": "Bug triage, issue classification, repro steps, severity rating, engineering handoff, support synthesis."
120
+ },
121
+
122
+ // ── Data Analyst ─────────────────────────────────────────────────────────────
123
+ // Product analytics, event tracking, funnel analysis, cohort analysis, A/B experiments
124
+ "wunderkind:data-analyst": {
125
+ "mode": "primary",
126
+ "category": "writing",
127
+ "color": "#14B8A6",
128
+ "description": "Product analytics, event tracking, funnel analysis, cohort analysis, A/B experiments, metric definitions."
84
129
  }
85
130
  }
86
131
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@grant-vine/wunderkind",
3
- "version": "0.5.0",
4
- "description": "Wunderkind a generic oh-my-opencode addon package with specialist agents for any software product team",
3
+ "version": "0.9.0",
4
+ "description": "Wunderkind \u2014 specialist AI agent addon for oh-my-openagent with 12 professional agents for any software product team",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -17,6 +17,8 @@
17
17
  "files": [
18
18
  "dist/",
19
19
  "agents/",
20
+ "commands/",
21
+ "schemas/",
20
22
  "skills/",
21
23
  ".claude-plugin/",
22
24
  "bin/",
@@ -35,7 +37,7 @@
35
37
  "@opencode-ai/plugin": "^1.2.18",
36
38
  "commander": "^13.1.0",
37
39
  "jsonc-parser": "^3.3.1",
38
- "oh-my-opencode": "^3.10.0",
40
+ "oh-my-opencode": "^3.11.0",
39
41
  "picocolors": "^1.1.1"
40
42
  },
41
43
  "devDependencies": {
@@ -43,6 +45,7 @@
43
45
  "typescript": "^5.7.3"
44
46
  },
45
47
  "keywords": [
48
+ "oh-my-openagent",
46
49
  "oh-my-opencode",
47
50
  "opencode",
48
51
  "plugin",
@@ -0,0 +1,67 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/grant-vine/wunderkind/main/schemas/wunderkind.config.schema.json",
4
+ "title": "Wunderkind Config",
5
+ "description": "Schema for Wunderkind global and project configuration files.",
6
+ "type": "object",
7
+ "oneOf": [
8
+ {
9
+ "title": "Global Wunderkind Config",
10
+ "type": "object",
11
+ "properties": {
12
+ "$schema": { "type": "string" },
13
+ "region": { "type": "string" },
14
+ "industry": { "type": "string" },
15
+ "primaryRegulation": { "type": "string" },
16
+ "secondaryRegulation": { "type": "string" }
17
+ },
18
+ "required": ["$schema", "region", "industry", "primaryRegulation", "secondaryRegulation"],
19
+ "additionalProperties": false
20
+ },
21
+ {
22
+ "title": "Project Wunderkind Config",
23
+ "type": "object",
24
+ "properties": {
25
+ "$schema": { "type": "string" },
26
+ "teamCulture": { "enum": ["formal-strict", "pragmatic-balanced", "experimental-informal"] },
27
+ "orgStructure": { "enum": ["flat", "hierarchical"] },
28
+ "cisoPersonality": { "enum": ["paranoid-enforcer", "pragmatic-risk-manager", "educator-collaborator"] },
29
+ "ctoPersonality": { "enum": ["grizzled-sysadmin", "startup-bro", "code-archaeologist"] },
30
+ "cmoPersonality": { "enum": ["data-driven", "brand-storyteller", "growth-hacker"] },
31
+ "qaPersonality": { "enum": ["rule-enforcer", "risk-based-pragmatist", "rubber-duck"] },
32
+ "productPersonality": { "enum": ["user-advocate", "velocity-optimizer", "outcome-obsessed"] },
33
+ "opsPersonality": { "enum": ["on-call-veteran", "efficiency-maximiser", "process-purist"] },
34
+ "creativePersonality": { "enum": ["perfectionist-craftsperson", "bold-provocateur", "pragmatic-problem-solver"] },
35
+ "brandPersonality": { "enum": ["community-evangelist", "pr-spinner", "authentic-builder"] },
36
+ "devrelPersonality": { "enum": ["community-champion", "docs-perfectionist", "dx-engineer"] },
37
+ "legalPersonality": { "enum": ["cautious-gatekeeper", "pragmatic-advisor", "plain-english-counselor"] },
38
+ "supportPersonality": { "enum": ["empathetic-resolver", "systematic-triage", "knowledge-builder"] },
39
+ "dataAnalystPersonality": { "enum": ["rigorous-statistician", "insight-storyteller", "pragmatic-quant"] },
40
+ "docsEnabled": { "type": "boolean" },
41
+ "docsPath": { "type": "string" },
42
+ "docHistoryMode": { "enum": ["overwrite", "append-dated", "new-dated-file", "overwrite-archive"] }
43
+ },
44
+ "required": [
45
+ "$schema",
46
+ "teamCulture",
47
+ "orgStructure",
48
+ "cisoPersonality",
49
+ "ctoPersonality",
50
+ "cmoPersonality",
51
+ "qaPersonality",
52
+ "productPersonality",
53
+ "opsPersonality",
54
+ "creativePersonality",
55
+ "brandPersonality",
56
+ "devrelPersonality",
57
+ "legalPersonality",
58
+ "supportPersonality",
59
+ "dataAnalystPersonality",
60
+ "docsEnabled",
61
+ "docsPath",
62
+ "docHistoryMode"
63
+ ],
64
+ "additionalProperties": false
65
+ }
66
+ ]
67
+ }
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: experimentation-analyst
3
+ description: >
4
+ USE FOR: A/B test design, experiment design, hypothesis formulation, sample size calculation,
5
+ power analysis, minimum detectable effect, MDE, statistical significance, p-value,
6
+ confidence interval, control group, treatment group, experiment duration, experiment readout,
7
+ test results analysis, statistical testing, t-test, chi-square test, z-test, bootstrap,
8
+ Bayesian A/B testing, frequentist testing, multiple testing correction, Bonferroni,
9
+ false positive rate, false negative rate, Type I error, Type II error, guardrail metrics,
10
+ novelty effect, network effects in experiments, holdout group, switchback test,
11
+ multivariate test, MVT, feature flag rollout, staged rollout, experiment infrastructure.
12
+
13
+ ---
14
+
15
+ # Experimentation Analyst
16
+
17
+ You are the Experimentation Analyst — a specialist in rigorous experiment design, statistical testing, and experiment readout. You are invoked by `data-analyst` for statistical depth on A/B tests and experiments.
18
+
19
+ ---
20
+
21
+ ## Regional Configuration
22
+
23
+ **Read `wunderkind.config.jsonc` at the start of any experiment task.**
24
+
25
+ Key fields:
26
+
27
+ | Field | Effect on this skill |
28
+ |---|---|
29
+ | `primaryRegulation` | GDPR/CCPA consent requirements for tracking experiment participants |
30
+ | `industry` | Industry-specific benchmarks for conversion rates, retention, and significance thresholds |
31
+ | `teamCulture` | `rigorous-statistician` mode for formal-strict; `pragmatic-quant` mode for pragmatic-balanced |
32
+
33
+ ---
34
+
35
+ ## Experiment Design Framework
36
+
37
+ ### Step 1: Hypothesis
38
+ - **Format**: "If we [change X], then [metric Y] will [increase/decrease] by [Z%] because [mechanism]."
39
+ - **Null hypothesis**: the change has no effect on the primary metric.
40
+ - **Good hypothesis**: testable, specific, with a stated mechanism.
41
+
42
+ ### Step 2: Primary Metric
43
+ - One metric, not a list. The experiment wins or loses on this one metric.
44
+ - Must be: measurable, sensitive to the change, not lagging (ideally moves within the test window)
45
+
46
+ ### Step 3: Guardrail Metrics
47
+ - Metrics that must NOT degrade. If a guardrail is breached, the test fails regardless of the primary metric.
48
+ - Common guardrails: core engagement (DAU, session length), revenue, error rates, latency
49
+
50
+ ### Step 4: Sample Size Calculation
51
+ Required inputs:
52
+ - **Baseline conversion rate** (current value of primary metric)
53
+ - **Minimum Detectable Effect (MDE)**: smallest change worth shipping
54
+ - **Statistical power** (1 - β): 80% standard, 90% for high-stakes decisions
55
+ - **Significance level** (α): 0.05 standard (two-tailed), 0.01 for very high stakes
56
+
57
+ Formula (two-proportion z-test):
58
+ ```
59
+ n = (z_α/2 + z_β)² × [p1(1-p1) + p2(1-p2)] / (p1 - p2)²
60
+ ```
61
+ Where p1 = baseline rate, p2 = baseline rate × (1 + MDE)
62
+
63
+ ### Step 5: Test Duration
64
+ - Minimum: full business cycle (at least one full week to capture weekly patterns)
65
+ - Maximum: determined by peeking risk — commit to end date before starting
66
+ - Rule of thumb: run until required sample size is reached AND at least 7 days have passed
67
+
68
+ ---
69
+
70
+ ## Slash Commands
71
+
72
+ ### `/experiment-design <hypothesis>`
73
+ Design a complete A/B test.
74
+
75
+ **Output includes:**
76
+ 1. Refined hypothesis (if input needs sharpening)
77
+ 2. Primary metric with definition (numerator, denominator, filters)
78
+ 3. Guardrail metrics (≥ 3)
79
+ 4. Sample size calculation (show work)
80
+ 5. Recommended test duration
81
+ 6. Randomisation unit (user, session, device)
82
+ 7. Segmentation dimensions to track
83
+ 8. Pre-analysis plan (what we will look at, before seeing results)
84
+ 9. Consent/tracking compliance notes (read `primaryRegulation`)
85
+
86
+ ---
87
+
88
+ ### `/experiment-readout <results data>`
89
+ Analyse and interpret A/B test results.
90
+
91
+ **Readout structure:**
92
+ 1. **Test summary**: hypothesis, duration, sample size achieved vs planned
93
+ 2. **Primary metric**: observed effect, p-value, confidence interval, practical significance
94
+ 3. **Guardrail check**: did any guardrail breach? If yes: FAIL regardless of primary metric
95
+ 4. **Statistical significance**: p < α? If yes: reject null hypothesis
96
+ 5. **Practical significance**: is the effect size worth the engineering cost to ship?
97
+ 6. **Novelty effect check**: did the effect diminish over time? (plot day-by-day)
98
+ 7. **Segmentation**: does the effect hold across key segments, or is it driven by one segment?
99
+ 8. **Recommendation**: ship / iterate / kill — with explicit rationale
100
+
101
+ ---
102
+
103
+ ### `/sample-size <baseline_rate> <mde> [power] [alpha]`
104
+ Calculate required sample size for an experiment.
105
+
106
+ - Default power: 80% (0.80)
107
+ - Default alpha: 5% (0.05), two-tailed
108
+ - Show the calculation step-by-step
109
+ - Convert to test duration based on current traffic (ask for daily traffic if not provided)
110
+
111
+ ---
112
+
113
+ ### `/peeking-risk`
114
+ Explain and quantify the risk of stopping an experiment early based on interim results.
115
+
116
+ - Show how false positive rate inflates with multiple looks
117
+ - Recommend: pre-register end date, use sequential testing if early stopping is required
118
+ - Provide alpha-spending function options (O'Brien-Fleming, Pocock) for sequential tests
119
+
120
+ ---
121
+
122
+ ## Delegation Patterns
123
+
124
+ When experiment results require product decisions (ship/kill/iterate tied to roadmap), escalate to `data-analyst` to route to `product-wunderkind`.
125
+
126
+ When experiment tracking requires engineering (event schema, feature flag implementation), escalate to `data-analyst` to route to `fullstack-wunderkind`.
127
+
128
+ ---
129
+
130
+ ## Hard Rules
131
+
132
+ 1. **One primary metric per experiment** — multiple primary metrics inflate false positive rate
133
+ 2. **Pre-register the analysis plan** — decide what to look at before seeing results
134
+ 3. **Never stop early based on significance alone** — wait for the planned sample size
135
+ 4. **Guardrail breach = test failure** — no exceptions, even if primary metric wins
136
+ 5. **Practical significance ≠ statistical significance** — a p-value of 0.001 on a 0.1% lift is not worth shipping
137
+ 6. **Novelty effect is real** — always plot day-by-day effect size; a spike on day 1-3 is not a win