@oisincoveney/pipeline 1.27.14 → 1.27.16

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 (80) hide show
  1. package/README.md +1 -1
  2. package/dist/config.js +1 -18
  3. package/dist/index.js +12 -2
  4. package/dist/install-commands.js +0 -46
  5. package/dist/pipeline-init.js +31 -12
  6. package/docs/config-architecture.md +7 -8
  7. package/docs/operator-guide.md +1 -1
  8. package/docs/slash-command-adapter-contract.md +4 -4
  9. package/package.json +1 -3
  10. package/.agents/skills/add-dark-mode/SKILL.md +0 -79
  11. package/.agents/skills/brand-kit/SKILL.md +0 -61
  12. package/.agents/skills/brand-kit/brand-kit-prompt.md +0 -158
  13. package/.agents/skills/canonicalize-tailwind/SKILL.md +0 -86
  14. package/.agents/skills/componentize/SKILL.md +0 -60
  15. package/.agents/skills/critique/SKILL.md +0 -372
  16. package/.agents/skills/dark-mode-image/SKILL.md +0 -64
  17. package/.agents/skills/design/SKILL.md +0 -58
  18. package/.agents/skills/design/design-guidelines.md +0 -74
  19. package/.agents/skills/design/guidelines/assets-api.md +0 -196
  20. package/.agents/skills/design/guidelines/avatars.md +0 -8
  21. package/.agents/skills/design/guidelines/badges.md +0 -5
  22. package/.agents/skills/design/guidelines/border-radius.md +0 -6
  23. package/.agents/skills/design/guidelines/buttons.md +0 -27
  24. package/.agents/skills/design/guidelines/colors.md +0 -6
  25. package/.agents/skills/design/guidelines/copywriting.md +0 -9
  26. package/.agents/skills/design/guidelines/custom-fonts.md +0 -7
  27. package/.agents/skills/design/guidelines/dark-mode.md +0 -29
  28. package/.agents/skills/design/guidelines/dashboards.md +0 -12
  29. package/.agents/skills/design/guidelines/description-lists.md +0 -5
  30. package/.agents/skills/design/guidelines/feature-lists.md +0 -5
  31. package/.agents/skills/design/guidelines/flexbox-layout.md +0 -6
  32. package/.agents/skills/design/guidelines/font-recommendations.md +0 -175
  33. package/.agents/skills/design/guidelines/footers.md +0 -13
  34. package/.agents/skills/design/guidelines/form-controls.md +0 -139
  35. package/.agents/skills/design/guidelines/general.md +0 -47
  36. package/.agents/skills/design/guidelines/headers.md +0 -8
  37. package/.agents/skills/design/guidelines/heading-groups.md +0 -19
  38. package/.agents/skills/design/guidelines/icons.md +0 -18
  39. package/.agents/skills/design/guidelines/images.md +0 -12
  40. package/.agents/skills/design/guidelines/interactivity.md +0 -6
  41. package/.agents/skills/design/guidelines/landing-pages.md +0 -11
  42. package/.agents/skills/design/guidelines/login-pages.md +0 -5
  43. package/.agents/skills/design/guidelines/logo-clouds.md +0 -6
  44. package/.agents/skills/design/guidelines/navigation.md +0 -10
  45. package/.agents/skills/design/guidelines/pagination.md +0 -5
  46. package/.agents/skills/design/guidelines/placeholder-content.md +0 -23
  47. package/.agents/skills/design/guidelines/pricing-cards.md +0 -42
  48. package/.agents/skills/design/guidelines/prose-content.md +0 -11
  49. package/.agents/skills/design/guidelines/responsive-design.md +0 -15
  50. package/.agents/skills/design/guidelines/section-layout.md +0 -23
  51. package/.agents/skills/design/guidelines/shadows.md +0 -6
  52. package/.agents/skills/design/guidelines/surfaces.md +0 -13
  53. package/.agents/skills/design/guidelines/svg.md +0 -7
  54. package/.agents/skills/design/guidelines/tables.md +0 -27
  55. package/.agents/skills/design/guidelines/team-sections.md +0 -13
  56. package/.agents/skills/design/guidelines/testimonials.md +0 -11
  57. package/.agents/skills/design/guidelines/typography.md +0 -18
  58. package/.agents/skills/diagnose/SKILL.md +0 -66
  59. package/.agents/skills/doubt/SKILL.md +0 -243
  60. package/.agents/skills/execute/SKILL.md +0 -30
  61. package/.agents/skills/fix/SKILL.md +0 -60
  62. package/.agents/skills/grill/SKILL.md +0 -41
  63. package/.agents/skills/ideas/SKILL.md +0 -161
  64. package/.agents/skills/improve/SKILL.md +0 -49
  65. package/.agents/skills/inspect/SKILL.md +0 -41
  66. package/.agents/skills/library-first-development/SKILL.md +0 -93
  67. package/.agents/skills/make-responsive/SKILL.md +0 -91
  68. package/.agents/skills/markup-from-image/SKILL.md +0 -88
  69. package/.agents/skills/migrate/SKILL.md +0 -211
  70. package/.agents/skills/optimize/SKILL.md +0 -350
  71. package/.agents/skills/quality-gate/SKILL.md +0 -89
  72. package/.agents/skills/quick/SKILL.md +0 -30
  73. package/.agents/skills/research/SKILL.md +0 -59
  74. package/.agents/skills/scope/SKILL.md +0 -119
  75. package/.agents/skills/secure/SKILL.md +0 -351
  76. package/.agents/skills/spec/SKILL.md +0 -219
  77. package/.agents/skills/test/SKILL.md +0 -68
  78. package/.agents/skills/trace/SKILL.md +0 -65
  79. package/.agents/skills/verify/SKILL.md +0 -109
  80. package/.pipeline/skills/schedule-graph-shaping/SKILL.md +0 -58
package/README.md CHANGED
@@ -241,7 +241,7 @@ runner.
241
241
 
242
242
  | Host | Generated files | Invocation |
243
243
  | --- | --- | --- |
244
- | OpenCode | `.opencode/commands/<entrypoint>.md`, `.opencode/agents/*.md`, `.opencode/skills/*/SKILL.md`, `.opencode/plugins/*.ts`, `.opencode/opencode.json` | `/quick <task>`, `/execute <task>`, `/inspect <task>` |
244
+ | OpenCode | `.opencode/commands/<entrypoint>.md`, `.opencode/agents/*.md`, `.opencode/plugins/*.ts`, `.opencode/opencode.json` | `/quick <task>`, `/execute <task>`, `/inspect <task>` |
245
245
 
246
246
  The installer is idempotent, supports `--check` and `--dry-run`, and refuses to
247
247
  overwrite manually edited files unless `--force` is supplied.
package/dist/config.js CHANGED
@@ -126,55 +126,38 @@ mcp_gateway:
126
126
  skills:
127
127
  execute:
128
128
  path: .agents/skills/execute/SKILL.md
129
- source_root: package
130
129
  inspect:
131
130
  path: .agents/skills/inspect/SKILL.md
132
- source_root: package
133
131
  quick:
134
132
  path: .agents/skills/quick/SKILL.md
135
- source_root: package
136
133
  critique:
137
134
  path: .agents/skills/critique/SKILL.md
138
- source_root: package
139
135
  doubt:
140
136
  path: .agents/skills/doubt/SKILL.md
141
- source_root: package
142
137
  fix:
143
138
  path: .agents/skills/fix/SKILL.md
144
- source_root: package
145
139
  library-first-development:
146
140
  path: .agents/skills/library-first-development/SKILL.md
147
- source_root: package
148
141
  migrate:
149
142
  path: .agents/skills/migrate/SKILL.md
150
- source_root: package
151
143
  optimize:
152
144
  path: .agents/skills/optimize/SKILL.md
153
- source_root: package
154
145
  research:
155
146
  path: .agents/skills/research/SKILL.md
156
- source_root: package
157
147
  schedule-graph-shaping:
158
- path: .pipeline/skills/schedule-graph-shaping/SKILL.md
159
- source_root: package
148
+ path: .agents/skills/schedule-graph-shaping/SKILL.md
160
149
  scope:
161
150
  path: .agents/skills/scope/SKILL.md
162
- source_root: package
163
151
  secure:
164
152
  path: .agents/skills/secure/SKILL.md
165
- source_root: package
166
153
  spec:
167
154
  path: .agents/skills/spec/SKILL.md
168
- source_root: package
169
155
  test:
170
156
  path: .agents/skills/test/SKILL.md
171
- source_root: package
172
157
  trace:
173
158
  path: .agents/skills/trace/SKILL.md
174
- source_root: package
175
159
  verify:
176
160
  path: .agents/skills/verify/SKILL.md
177
- source_root: package
178
161
  profiles:
179
162
  moka-orchestrator:
180
163
  runner: opencode
package/dist/index.js CHANGED
@@ -210,7 +210,7 @@ function truncateMiddle(text, maxLength) {
210
210
  function createCliProgram() {
211
211
  const configuredPipeline = loadConfiguredEntrypoints(process.env.PIPELINE_TARGET_PATH ?? process.cwd());
212
212
  const program = new Command();
213
- program.name("moka").description("Submit work to Momokaya").exitOverride();
213
+ program.name("moka").description("Submit work to Momokaya").version(readPackageVersion()).exitOverride();
214
214
  const runAction = async (descriptionParts, flags) => {
215
215
  await execute(descriptionParts.join(" "), {
216
216
  entrypoint: flags.entrypoint,
@@ -303,6 +303,11 @@ function createCliProgram() {
303
303
  } });
304
304
  return program;
305
305
  }
306
+ function readPackageVersion() {
307
+ const packageJson = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
308
+ if (typeof packageJson.version !== "string") throw new Error("Unable to read @oisincoveney/pipeline package version.");
309
+ return packageJson.version;
310
+ }
306
311
  function addMokaSubmitOptions(command) {
307
312
  return addRunnerArgoOptions(command.option("--quick", "submit the compact graph").option("--command", "treat input after -- as explicit argv").option("--schedule <path>", "approved schedule YAML to submit").option("--event-url <url>", "runner event sink URL").option("--task <text>", "task description for command-mode metadata"), { kubeconfig: true });
308
313
  }
@@ -418,10 +423,15 @@ function lintMissingFileReferences(config, projectRoot) {
418
423
  if (!value || standardOutputSchemaNameFromPath(value) || existsSync(resolveLintPathReference(projectRoot, ref.ref))) return [];
419
424
  return [{
420
425
  ruleId: "missing-file-reference",
421
- message: `${ref.path} references missing file '${value}'`
426
+ message: missingFileReferenceMessage(ref.path, value)
422
427
  }];
423
428
  });
424
429
  }
430
+ function missingFileReferenceMessage(path, value) {
431
+ const base = `${path} references missing file '${value}'`;
432
+ if (path.startsWith("skills.") && value.startsWith(".agents/skills/")) return `${base}. Run \`moka init\` to install project-local skills with \`npx --yes skills add oisincoveney/skills\`.`;
433
+ return base;
434
+ }
425
435
  function resolveLintPathReference(projectRoot, ref) {
426
436
  if (ref?.source_root === "package") return resolvePackageAssetPath(ref.path);
427
437
  return resolve(projectRoot, ref?.path ?? "");
@@ -1,4 +1,3 @@
1
- import { resolveFileReference } from "./path-refs.js";
2
1
  import { DEFAULT_OPENCODE_ECOSYSTEM_MANIFEST, loadPipelineConfig } from "./config.js";
3
2
  import { compileWorkflowPlan } from "./workflow-planner.js";
4
3
  import { renderOpenCodeGatewayConfig } from "./mcp/gateway.js";
@@ -315,49 +314,6 @@ function localPluginDefinitions() {
315
314
  }];
316
315
  });
317
316
  }
318
- function opencodeSkillProjections(config, cwd) {
319
- return [...profileSkillIds(config)].sort((a, b) => a.localeCompare(b)).map((id) => {
320
- const configured = config.skills[id];
321
- const path = configured?.path ?? `.agents/skills/${id}/SKILL.md`;
322
- return {
323
- description: skillDescription(cwd, configured, path, id),
324
- id,
325
- path
326
- };
327
- });
328
- }
329
- function profileSkillIds(config) {
330
- return new Set(Object.values(config.profiles).flatMap((profile) => profile.skills ?? []));
331
- }
332
- function skillDescription(cwd, configured, path, id) {
333
- const absolutePath = configured?.source_root === "package" ? resolvePackageAssetPath(path) : resolveFileReference(cwd, path);
334
- if (existsSync(absolutePath)) {
335
- const parsed = matter(readFileSync(absolutePath, "utf8"));
336
- if (typeof parsed.data.description === "string") return parsed.data.description;
337
- }
338
- return `Pipeline skill ${id} projected from ${path}.`;
339
- }
340
- function opencodeSkillDefinition(skill) {
341
- return {
342
- content: markdown({
343
- compatibility: "opencode",
344
- description: skill.description,
345
- metadata: { "pipeline-source": skill.path },
346
- name: skill.id
347
- }, [
348
- header("opencode").trimEnd(),
349
- "",
350
- `This is the package-owned OpenCode projection for pipeline skill \`${skill.id}\`.`,
351
- "",
352
- `Canonical source: \`${skill.path}\`.`,
353
- "",
354
- "Load this skill when a generated pipeline agent grants it through `permission.skill`."
355
- ].join("\n")),
356
- host: "opencode",
357
- invocation: invocationForHost("opencode"),
358
- path: `.opencode/skills/${skill.id}/SKILL.md`
359
- };
360
- }
361
317
  function opencodeDefinitions(config, cwd) {
362
318
  const orchestrator = orchestratorProfile(config);
363
319
  return [
@@ -425,7 +381,6 @@ function opencodeDefinitions(config, cwd) {
425
381
  invocation: invocationForHost("opencode"),
426
382
  path: `.opencode/agents/${nativeAgentIdForHost("opencode", id)}.md`
427
383
  })),
428
- ...opencodeSkillProjections(config, cwd).map(opencodeSkillDefinition),
429
384
  ...localPluginDefinitions(),
430
385
  projectAgentsMdDefinition(cwd, "opencode")
431
386
  ];
@@ -491,7 +446,6 @@ function selectedHosts(host) {
491
446
  const GENERATED_RESOURCE_ROOTS = { opencode: [
492
447
  ".opencode/commands",
493
448
  ".opencode/agents",
494
- ".opencode/skills",
495
449
  ".opencode/plugins"
496
450
  ] };
497
451
  async function listFiles(root) {
@@ -1,20 +1,39 @@
1
- import { resolvePackageAssetPath } from "./package-assets.js";
2
1
  import { installCommands } from "./install-commands.js";
3
- import { dirname, join } from "node:path";
4
- import { cp, mkdir } from "node:fs/promises";
2
+ import { execa } from "execa";
5
3
  //#region src/pipeline-init.ts
6
- async function installDefaultSkillsFromPackage(cwd) {
7
- const source = resolvePackageAssetPath(".agents/skills");
8
- const target = join(cwd, ".agents", "skills");
9
- await mkdir(dirname(target), { recursive: true });
10
- await cp(source, target, {
11
- force: true,
12
- recursive: true
13
- });
4
+ const DEFAULT_SKILL_INSTALL_SOURCE = "oisincoveney/skills";
5
+ const DEFAULT_SKILL_INSTALL_ARGS = [
6
+ "--agent",
7
+ "opencode",
8
+ "--agent",
9
+ "codex",
10
+ "--agent",
11
+ "claude-code",
12
+ "--skill",
13
+ "*",
14
+ "--yes",
15
+ "--copy"
16
+ ];
17
+ async function installDefaultSkills(cwd) {
18
+ try {
19
+ await execa("npx", [
20
+ "--yes",
21
+ "skills",
22
+ "add",
23
+ DEFAULT_SKILL_INSTALL_SOURCE,
24
+ ...DEFAULT_SKILL_INSTALL_ARGS
25
+ ], {
26
+ cwd,
27
+ stdio: "inherit"
28
+ });
29
+ } catch (error) {
30
+ const cause = error instanceof Error ? `: ${error.message}` : "";
31
+ throw new Error(`Failed to install default skills from ${DEFAULT_SKILL_INSTALL_SOURCE}${cause}. If this is a private repository, authenticate GitHub access for npx skills add and rerun \`moka init\`.`);
32
+ }
14
33
  }
15
34
  async function initPipelineProject(options = {}) {
16
35
  const cwd = options.cwd ?? process.cwd();
17
- await (options.skillInstaller ?? installDefaultSkillsFromPackage)(cwd);
36
+ await (options.skillInstaller ?? installDefaultSkills)(cwd);
18
37
  return { files: (await installCommands({
19
38
  cwd,
20
39
  force: true,
@@ -151,19 +151,18 @@ receive explicit grants:
151
151
  - `network`: inherited or disabled.
152
152
  - `output`: text, JSON, JSONL, or JSON Schema output.
153
153
 
154
- Package-owned default skills may resolve from the installed package asset root
155
- instead of the target repository root:
154
+ Default skills resolve from project-installed skill files created by
155
+ `moka init` via `npx --yes skills add oisincoveney/skills`:
156
156
 
157
157
  ```yaml
158
158
  skills:
159
159
  verify:
160
160
  path: .agents/skills/verify/SKILL.md
161
- source_root: package
162
161
  ```
163
162
 
164
- Project-authored skill and rule paths still resolve from the project root and
165
- must exist. The package default loader does not relax missing-file validation;
166
- it validates package assets against the package root.
163
+ Project-authored skill and rule paths resolve from the project root and must
164
+ exist for runtime use. If default skill files are missing, run `moka init` to
165
+ install them before executing workflows.
167
166
 
168
167
  MCP-enabled profiles use one gateway grant:
169
168
 
@@ -190,8 +189,8 @@ OpenCode host resources are generated from the same profile registry:
190
189
 
191
190
  - `.opencode/agents/*.md` declares native agents with `mode`, `description`,
192
191
  resolved model, explicit permissions, and task access to generated agents only.
193
- - `.opencode/skills/*/SKILL.md` projects package-granted skills for native
194
- OpenCode discovery.
192
+ - `.opencode/skills/*/SKILL.md` is installed by `skills add`; Moka only
193
+ generates agents, commands, plugins, and project config.
195
194
  - `.opencode/plugins/pipeline-goal-context.ts` projects package-owned
196
195
  continuation context into OpenCode compaction.
197
196
  - `.opencode/opencode.json` contains the gateway MCP config, enables LSP, and
@@ -269,7 +269,7 @@ Codex: $quick, $execute, $inspect
269
269
  - `.opencode/commands/<entrypoint>.md` for `/quick`, `/execute`, and `/inspect`
270
270
  - `.opencode/agents/*.md` for primary and subagent profiles with explicit
271
271
  `permission` maps, `task` grants, and denied ungranted tools
272
- - `.opencode/skills/*/SKILL.md` for package-granted skills
272
+ - `.opencode/skills/*/SKILL.md` from `npx skills add`, not Moka generation
273
273
  - `.opencode/plugins/pipeline-goal-context.ts` for goal-loop compaction context
274
274
  - `.opencode/opencode.json` with LSP, the singleton `pipeline-gateway` MCP
275
275
  server, and pinned package-selected plugins
@@ -15,7 +15,7 @@ moka install-commands --host all --check
15
15
 
16
16
  | Host | Generated resources | Invocation | Mechanical path |
17
17
  | -------- | -------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
18
- | OpenCode | `.opencode/commands/<entrypoint>.md`, `.opencode/agents/*.md`, `.opencode/skills/*/SKILL.md`, `.opencode/opencode.json` | `/quick <task>`, `/execute <task>`, `/inspect <task>` | Project commands run a primary orchestrator and OpenCode native subagents with package-owned skill, MCP, permission, and LSP projection. |
18
+ | OpenCode | `.opencode/commands/<entrypoint>.md`, `.opencode/agents/*.md`, `.opencode/opencode.json` | `/quick <task>`, `/execute <task>`, `/inspect <task>` | Project commands run a primary orchestrator and OpenCode native subagents with package-owned skill, MCP, permission, and LSP projection. |
19
19
 
20
20
  ## Projection Rules
21
21
 
@@ -31,9 +31,9 @@ moka install-commands --host all --check
31
31
  - OpenCode agents project package profiles as markdown agents with `mode`,
32
32
  `description`, resolved `model`, `permission`, `hidden`, and task permission
33
33
  maps. The primary orchestrator may call only generated package profile agents.
34
- - OpenCode skill projection is generated from package profile grants into
35
- `.opencode/skills`. Skill files point back to package-owned source paths and
36
- per-agent `permission.skill` maps deny ungranted skills.
34
+ - OpenCode skill files are installed by `npx skills add` during `moka init`;
35
+ Moka does not generate `.opencode/skills`. Generated agent
36
+ `permission.skill` maps still deny ungranted skills.
37
37
  - `.opencode/opencode.json` includes the singleton `pipeline-gateway` MCP
38
38
  server and enables OpenCode LSP. CLI lint, typecheck, tests, and configured
39
39
  gates remain the blocking verification path; LSP is editor/runtime assistance.
package/package.json CHANGED
@@ -100,8 +100,6 @@
100
100
  }
101
101
  },
102
102
  "files": [
103
- ".agents/skills",
104
- ".pipeline/skills",
105
103
  "defaults",
106
104
  "dist",
107
105
  "docs",
@@ -120,7 +118,7 @@
120
118
  "prepack": "bun run build:cli"
121
119
  },
122
120
  "type": "module",
123
- "version": "1.27.14",
121
+ "version": "1.27.16",
124
122
  "description": "Config-driven multi-agent pipeline runner for repository work",
125
123
  "main": "./dist/index.js",
126
124
  "types": "./dist/index.d.ts",
@@ -1,79 +0,0 @@
1
- ---
2
- name: add-dark-mode
3
- description: Add dark mode with colors, shadows, and surfaces handled the way a designer would.
4
- ---
5
-
6
- # Add Dark Mode
7
-
8
- Use this when the user wants to add dark mode support to an existing UI.
9
-
10
- ## Activation
11
-
12
- ### Use For
13
-
14
- - adding dark mode to a page, section, component, or site
15
- - improving an existing dark mode treatment
16
- - converting a light-mode-only UI to support dark mode
17
-
18
- ### Do Not Use For
19
-
20
- - brand-new design or layout work
21
- - standalone image dark-mode conversion
22
- - responsive behavior, component organization, or general visual polish without dark mode
23
-
24
- ## Load First
25
-
26
- - No companion files are required.
27
- - Dark-mode design guidance is inline below.
28
-
29
- ## Progress Updates
30
-
31
- Keep the user informed so longer runs do not look stuck.
32
-
33
- - One-line status update before each major phase.
34
- - Concrete and lightweight: what you are doing now, not verbose logs.
35
-
36
- ## Workflow
37
-
38
- 1. Inspect the existing UI and project Tailwind conventions.
39
- 2. Convert markup to include appropriate dark-mode classes.
40
- 3. Audit rasterized images for dark-mode variants.
41
- 4. For each rasterized image that needs a dark-mode variant, hand off to `dark-mode-image`, which MUST load and use the `imagegen` skill before creating or editing image assets.
42
- 5. Save generated dark-mode images alongside the originals and wire them into the dark-mode UI.
43
-
44
- ## Dark Mode Rules
45
-
46
- ### Design Rules
47
-
48
- - Dark mode is about maintaining the same contrast ratios as light mode, not simply inverting colors
49
- - Dark mode doesn't need to preserve every detail of the light mode design — it just needs to look good
50
- - Default dark mode to follow the operating system's `prefers-color-scheme` setting (Tailwind's built-in `dark:` behavior); only add a manual toggle when the user explicitly asks for one
51
- - Remove all shadows in dark mode — use `dark:shadow-none`
52
- - On dark-mode-only sites, add the `scheme-only-dark` class to `<html>` or the top-level element — ensures native elements like scrollbars, form controls, and `color-scheme` render in dark mode
53
-
54
- ### Component Rules
55
-
56
- - Never keep large branded/colored panels in dark mode; instead use the same background color and add a light divider between sections
57
- - Style cards only slightly lighter than the page background (e.g. `dark:bg-gray-900` on a `dark:bg-gray-950` page); add a `dark:inset-ring dark:inset-ring-white/5` for definition
58
- - Make decorative quote marks in testimonials very faint (e.g. `dark:text-white/5`)
59
- - Never use multiple heading text colors in dark mode (e.g. dark gray + brand color); use a single light color like `white` or `gray-100` for all heading text
60
-
61
- ### Raster Image Rules
62
-
63
- - When adding or improving dark mode, audit the page for rasterized images that need dark-mode versions: photos, screenshots, product mockups, decorative backgrounds, textures, and rasterized illustrations
64
- - Never use CSS filters (`invert`, `brightness`, `contrast`, `opacity`) as the final dark-mode treatment for raster images; always create real dark-mode image files
65
- - Generate dark-mode raster image variants with the `dark-mode-image` skill, which MUST load and use the `imagegen` skill before creating or editing any raster image assets
66
-
67
- ### SVG Rules
68
-
69
- - For inline `<svg>` elements, style dark mode with Tailwind `dark:*` classes (e.g. `dark:fill-*`, `dark:stroke-*`, `dark:text-*`)
70
- - For external SVG files referenced via `<img>`, always create a dark-mode version alongside the original (e.g. `logo.svg` and `logo-dark.svg`); never substitute CSS filters (`invert`, `brightness`) or opacity adjustments for a true dark variant
71
-
72
- ## Guardrails
73
-
74
- - Do not generate, edit, or replace raster image assets directly from this skill; `dark-mode-image` owns that work and MUST use the `imagegen` skill.
75
- - Require the `dark-mode-image` + `imagegen` handoff even when the image change seems simple, decorative, or incidental.
76
-
77
- ## Verify
78
-
79
- - Check light and dark modes for contrast, missing variants, and images that still assume a light background.
@@ -1,61 +0,0 @@
1
- ---
2
- name: brand-kit
3
- description: Generate a complete visual identity and marketing-site mockup board from a product idea.
4
- ---
5
-
6
- # Brand Kit
7
-
8
- ## Overview
9
-
10
- Run the brand kit workflow from concept to one finished 3840 x 2160 image. This skill wraps [Brand Kit Prompt](./brand-kit-prompt.md) and then renders the generated prompt directly through the `imagegen` skill.
11
-
12
- Use this workflow when the output should emphasize memorable frontend art direction, distinctive website composition, production-grade public-facing marketing pages, and avoidance of generic AI aesthetics. The final image should follow the fixed structure defined by [Brand Kit Prompt](./brand-kit-prompt.md): two large website page mockups plus a narrow design-system rail that documents only typography and hierarchical color values.
13
-
14
- ## Load First
15
-
16
- - Read [Brand Kit Prompt](./brand-kit-prompt.md) before generating the intermediate image prompt.
17
- - Load and follow the `imagegen` skill before rendering the final image.
18
-
19
- ## Workflow
20
-
21
- 1. Treat the user's concept, brief, notes, constraints, references, audience, tone, avoid-list items, and attached images as the source input.
22
- 2. Use [Brand Kit Prompt](./brand-kit-prompt.md) with the source input to generate one production-ready mockup-first image prompt. If images are attached, describe them as visual inspiration only using the rules in `Attached Images`.
23
- 3. Capture the full prompt text from step 2 as intermediate working content. Do not present it as the final answer unless the user explicitly asks to see it.
24
- 4. Use `$imagegen` with the full generated prompt from step 2 as its input, including any attached images as visual references when the imagegen interface supports reference images.
25
- 5. Generate exactly one high-quality 3840 x 2160 px 16:9 landscape image: a fixed three-column marketing-site case-study board with page mockup 1 in the left 40%, page mockup 2 in the middle 40%, and a right-side design-system details rail in the final 20%.
26
- 6. Return the rendered image. Keep final commentary minimal.
27
-
28
- ## Attached Images
29
-
30
- If the user attaches images, use them as design inspiration only:
31
-
32
- - Use attached images to infer aesthetic direction, composition style, visual density, color atmosphere, type mood, spacing feel, texture, lighting, layout rhythm, and interaction/presentation patterns.
33
- - Do not copy or recreate attached-image content, logos, wordmarks, brand marks, icons, mascots, characters, product names, readable text, photography subjects, proprietary UI, exact layouts, or distinctive artwork.
34
- - Do not treat attached images as mandatory content for the generated brand kit unless the user explicitly says the image is their own brand asset and asks to use it.
35
- - When passing the generated prompt to `$imagegen`, explicitly state that attached images are style references only and must not be replicated.
36
- - If attached images conflict with the user's written concept, preserve the written concept and use the images only for visual direction.
37
-
38
- ## Routing Rules
39
-
40
- - If the user provides only a thin but usable concept, make careful creative inferences in the prompt-generation step.
41
- - Ask a follow-up only when there is no usable brand, product, company, idea, or concept information.
42
- - Preserve all user-supplied constraints through both steps, especially names, audience, positioning, tone, visual references, attached-image inspiration, required deliverables, and avoid-list items.
43
- - If the user asks for the image plus the generated prompt, render the image first, then include the prompt text afterward.
44
- - If the prompt-generation step produces multiple boards, extra alternatives, a flexible metadata placement, or any output shape other than the fixed structure, normalize the result to match `brand-kit-prompt` before passing it to `imagegen`.
45
- - Do not route this workflow through `brand-kit-images`.
46
-
47
- ## Output Discipline
48
-
49
- - Do not stop after producing the intermediate prompt.
50
- - Do not summarize or rewrite the intermediate prompt so heavily that brand details are lost.
51
- - Treat [Brand Kit Prompt](./brand-kit-prompt.md) as the source of truth for image structure and content. If this wrapper conflicts with that file, follow [Brand Kit Prompt](./brand-kit-prompt.md).
52
- - Do not generate a separate design-system board.
53
- - Do not generate multiple images, a contact sheet, or a two-board split.
54
- - Do not copy attached images or import their content, logos, text, brand marks, exact layouts, or proprietary UI into the generated image.
55
- - Do not generate a 2:1 board, a 4096 x 2048 board, or a flexible metadata strip/sidebar/footer/overlay layout.
56
- - Make the final image exactly two large public-facing website page mockups plus the right-side design-system rail.
57
- - Include a consistent logo, wordmark, or brand mark inside the page mockups where a production website would naturally show one.
58
- - Keep the design-system rail compact but legible at full 4K size, preserving only font names/typeface directions, dominant color values, supporting color values, palette hierarchy, and short color role labels.
59
- - In the rail, distinguish dominant/load-bearing colors from infrequent supporting accents. Dominant colors should appear larger, grouped as the main palette, and labeled by role; supporting/accent/signal colors should appear as smaller chips.
60
- - Do not put logo notes, spacing scales, border radius, grid specs, motion notes, component inventories, component state details, icon notes, elevation/shadow specs, or arbitrary brand copy in the design-system rail.
61
- - Do not create extra files or resource directories for this wrapper skill.
@@ -1,158 +0,0 @@
1
- ---
2
- name: brand-kit-prompt
3
- description: Generate an image prompt for one fixed-structure 4K marketing-site brand case-study board with two large page mockups and a narrow design-system rail documenting typography and hierarchical colors. Use when Codex is asked to write a brand kit prompt, website mockup prompt, marketing site prompt, landing page prompt, product mockup prompt, or image-generation prompt for a visual brand identity.
4
- ---
5
-
6
- # Brand Kit Prompt
7
-
8
- ## Purpose
9
-
10
- Generate one complete, production-ready image prompt for a fixed-structure 4K marketing-site brand case-study image. Output prompt text only; do not generate images.
11
-
12
- This skill prioritizes distinctive frontend art direction, production-grade public-facing marketing website mockups, generous whitespace, and consistent side-by-side comparison. Even when the concept is a web app, desktop app, mobile app, SaaS product, or other software interface, the board should show the public marketing site for that product. The final image must feel like two real, spacious website surfaces plus a concise typography/color rail, not a cramped moodboard, component inventory, app UI board, or traditional brand-system sheet.
13
-
14
- ## Source Handling
15
-
16
- - Use only the user's concept, brief, notes, constraints, references, attached images, audience, tone, required pages, and avoid-list items.
17
- - If the input is thin but usable, make careful creative inferences.
18
- - Ask a question only when there is no usable brand, product, company, idea, or concept.
19
- - Preserve user-supplied vocabulary, constraints, page requests, examples, references, attached-image inspiration, and avoid-list items.
20
- - Output only the final prompt, with no preamble, rationale, commentary, follow-up, or setup text.
21
-
22
- ## Attached Images
23
-
24
- If the user attaches images, inspect them and translate their visual qualities into prompt language. Use them as design inspiration only:
25
-
26
- - Extract aesthetic direction, composition style, visual density, color atmosphere, type mood, spacing feel, texture, lighting, layout rhythm, and interaction/presentation patterns.
27
- - Do not copy or recreate attached-image content, logos, wordmarks, brand marks, icons, mascots, characters, product names, readable text, photography subjects, proprietary UI, exact layouts, or distinctive artwork.
28
- - Do not treat attached images as mandatory content for the generated brand kit unless the user explicitly says the image is their own brand asset and asks to use it.
29
- - If attached images conflict with the written concept, preserve the written concept and use the images only for visual direction.
30
- - In the final prompt, include a short "Reference Image Use" note when images are attached: describe the style inspiration to borrow and explicitly state that attached images are style references only, not content or logo sources.
31
-
32
- ## Workflow
33
-
34
- 1. Infer the purpose, audience, positioning, product context, and brand personality.
35
- 2. Choose one clear, memorable aesthetic direction that fits the concept.
36
- 3. Choose the two public marketing-site page examples:
37
- - Page mockup 1 defaults to the homepage.
38
- - Page mockup 2 defaults to a concept-appropriate supporting page with a different content pattern from the homepage.
39
- - If the user asks for specific pages, use those instead.
40
- - If the concept is an app or software product, choose pages that can naturally show product screenshots inside the marketing site.
41
- 4. If images are attached, summarize their reusable visual qualities using `Attached Images`.
42
- 5. Assemble one internally consistent image-generation prompt using the structure in `Final Prompt Structure`.
43
-
44
- ## Canonical Board Spec
45
-
46
- The generated prompt must request this exact image structure unless the user explicitly asks for a different structure:
47
-
48
- - Canvas: one single 3840 x 2160 px, 16:9 landscape, high-quality 4K image.
49
- - Layout: three full-height vertical columns with clean gutters.
50
- - Widths: page mockup 1 = 40%, page mockup 2 = 40%, design-system rail = 20%; equivalent ratio 2 : 2 : 1.
51
- - Left column: page mockup 1.
52
- - Middle column: page mockup 2.
53
- - Right column: design-system details rail.
54
- - The two page mockups must dominate and read as large, inspectable website pages.
55
- - The rail must be quieter than the mockups but legible at full 4K size.
56
- - Keep the page mockups spacious and breathable, with clear margins, open section rhythm, and enough negative space that the design does not feel busy.
57
- - Do not add extra panels, page thumbnails, floating device mockups, moodboard imagery, standalone logo explorations, component inventories, callout overlays, or decorative filler.
58
- - Do not generate a separate design-system board, a two-board split, multiple images, unreadably tiny UI fragments, or a dashboard/workspace/app UI board unless the user explicitly requests an interface-only board instead of a marketing site.
59
-
60
- ## Page Mockups
61
-
62
- The two mockups should be substantial public-facing marketing website pages with generous spacing, strong breathing room, and restrained content density. Treat an app concept as a product that needs a marketing site, not as permission to make the board an app UI study. Product/app UI may appear only as supporting content embedded inside a page mockup.
63
-
64
- If the concept is a web app, desktop app, mobile app, SaaS product, marketplace, creator tool, productivity tool, or other software product, include at least one realistic screenshot or framed view of the app inside the marketing pages. These screenshots should help explain the product and provide brand inspiration, while the surrounding page remains the main subject.
65
-
66
- Page mockup 1:
67
-
68
- - Default to the homepage.
69
- - Make it the clearest expression of the marketing promise.
70
- - Include primary navigation with an appropriate logo, wordmark, or brand mark; a strong hero system; primary CTA; and enough below-the-fold content to show section pacing.
71
- - For app/software concepts, include a prominent but embedded product screenshot, device frame, desktop/webapp frame, mobile screen, or interface crop.
72
-
73
- Page mockup 2:
74
-
75
- - Default to a supporting page that reveals a different side of the system.
76
- - Prefer pages that add new content patterns: pricing, booking, signup, product/service detail, collection/category, editorial/content, comparison, case study, lead-capture, checkout, account creation, search/results, commerce, structured data, forms, tables, cards, proof blocks, dense typography, or screenshot-led feature explanation.
77
- - Reuse the same logo, wordmark, or mark from the homepage in realistic page chrome when appropriate.
78
-
79
- For each page, define:
80
-
81
- - Page type and purpose.
82
- - Layout structure, hierarchy, key components, and copy tone.
83
- - Logo/wordmark/mark placement when a real site would include one.
84
- - Product screenshot placement when the concept is an app/software product.
85
- - Visible design behavior: grid/composition, generous spacing feel, low-to-moderate density, type scale, navigation, CTAs, forms, cards, pricing tables, proof blocks, product tiles, filters, commerce modules, editorial modules, or other relevant components.
86
- - Whitespace strategy: wide margins, clear gutters, open hero composition, fewer simultaneous content blocks, and section pacing that feels calm rather than crowded.
87
- - Distinctive frontend composition: asymmetry, overlap, strict grid, dense utility, editorial pacing, diagonal flow, immersive media, tactile states, active/hover states, scroll moments, or another concept-appropriate idea.
88
-
89
- ## Design-System Rail
90
-
91
- The right rail documents only values that are hard to recover from the mockups without OCR.
92
-
93
- Include:
94
-
95
- - Typography: display/headline, body, and UI/label/numeric/mono typeface names or typeface directions; include brief hierarchy, casing, weight, tracking, or pairing notes only when useful.
96
- - Color: dominant/core colors separated from supporting/accent colors; approximate hex-style values; short role labels such as background, foreground, primary, surface, border, signal, accent, semantic, or category.
97
- - Color hierarchy: dominant/load-bearing colors shown as larger swatches or bars; supporting/accent/signal colors shown as smaller grouped chips.
98
- - Rail text optimized for full-4K readability: short labels, large enough type, clear spacing, no dense captions.
99
-
100
- Do not include in the rail:
101
-
102
- - Logo, wordmark, mark construction, lockups, logo notes, logo variations, or logo-spec content.
103
- - Spacing scales, border radius, grid specs, motion notes, component inventories, component states, icon notes, elevation/shadow specs, or arbitrary brand copy.
104
- - Slogans, positioning paragraphs, mood words, or any text that does not directly document typography or color values used in the page mockups.
105
-
106
- ## Creative Direction
107
-
108
- Choose a bold but concept-appropriate aesthetic direction, such as brutally minimal, maximalist, retro-futuristic, organic, luxury, playful, editorial, brutalist, art deco, soft, industrial, utilitarian, or another direction inferred from the brief.
109
-
110
- Define:
111
-
112
- - Purpose: what visitors should understand, trust, and do.
113
- - Marketing focus: how the site introduces, explains, proves, and sells the brand.
114
- - Tone: 3-5 strong adjectives, not a neutral default.
115
- - Differentiation: the one visual, typographic, interaction, material, motif, or page-structure idea someone would remember.
116
- - Constraints: production-grade, functional, accessible, plausible for a real frontend.
117
- - Intensity: maximalist systems may be rich; refined systems should rely on restraint, proportion, and precision.
118
- - Spacing: preserve generous whitespace even for expressive or maximalist concepts; use scale, contrast, and composition for impact instead of cramming in more modules.
119
-
120
- Avoid:
121
-
122
- - Defaulting to Inter, Roboto, Arial, system fonts, or overused neutral typography unless requested.
123
- - Cliche purple-blue gradients on white, generic glassmorphism, bland SaaS dashboards, default rounded cards, cookie-cutter component layouts, unrelated gradient blobs, or decorative effects unrelated to the brand.
124
- - Cramped layouts, busy collages, overfilled sections, dense rows of tiny cards, excessive annotations, or too many simultaneous UI fragments.
125
- - Reusing the same trendy typefaces or color systems across concepts.
126
-
127
- ## Final Prompt Structure
128
-
129
- Assemble the final answer as the image prompt itself, using these sections:
130
-
131
- 1. Brand Positioning
132
- - Target audience, market positioning, 3-5 tone adjectives, brand personality, relevant comparables/references, and avoid list.
133
- 2. Aesthetic Concept
134
- - Core frontend art direction in one vivid phrase, why it fits, memorable design idea, intensity/restraint, and what makes it specific to this brand.
135
- 3. Reference Image Use
136
- - Include only when images are attached. Summarize reusable visual qualities and state that references are for style inspiration only, not for copied content, logos, text, exact layouts, or proprietary UI.
137
- 4. Board Layout
138
- - Restate the canonical 3840 x 2160, 40% / 40% / 20%, three-column layout and the prohibition on extra panels or alternate layouts.
139
- 5. Page Mockups
140
- - Define the homepage and supporting page using the `Page Mockups` requirements, or use the user's requested pages.
141
- 6. Design-System Rail
142
- - Define only the typography block and hierarchical color block using the `Design-System Rail` requirements.
143
- 7. Visual Style Constraints
144
- - State what to avoid, what to emphasize, anti-generic constraints, generous whitespace requirements, and that the fixed layout still applies even when the aesthetic is expressive.
145
- 8. Rendering / Style Hints
146
- - End with one concise rendering line: one 3840 x 2160 px 16:9 high-quality 4K presentation image; fixed 40% page mockup 1 / 40% page mockup 2 / 20% typography-and-color rail; crisp readable UI and rail text; production-grade marketing website mockups; bold concept-specific art direction; generous margins, open section rhythm, and calm whitespace; realistic polished visual design.
147
-
148
- ## Rules
149
-
150
- - Be specific and concrete; maintain internal consistency across all sections.
151
- - Make the aesthetic direction memorable and concept-specific.
152
- - Keep the website mockups spacious; do not trade readability and whitespace for extra content.
153
- - Use specific typeface names or precise typeface directions and approximate color values.
154
- - Specify which colors are dominant/load-bearing and which are supporting/rare accents, and require that hierarchy to be visible.
155
- - Keep all visible rail text short enough for image generation to render legibly.
156
- - Do not hardcode examples from one concept into another concept.
157
- - Do not ask for a separate design-system board or two images.
158
- - Do not explain your reasoning.