markilo 0.0.0-stage → 0.4.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 (179) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +10 -0
  3. package/README.md +325 -2
  4. package/THIRD_PARTY_NOTICES.md +58 -0
  5. package/package.json +75 -4
  6. package/plugin/.claude-plugin/icon.png +0 -0
  7. package/plugin/.claude-plugin/plugin.json +24 -0
  8. package/plugin/LICENSE +202 -0
  9. package/plugin/NOTICE +10 -0
  10. package/plugin/README.md +14 -0
  11. package/plugin/THIRD_PARTY_NOTICES.md +58 -0
  12. package/plugin/agents/brand-researcher.md +46 -0
  13. package/plugin/agents/concept-designer.md +82 -0
  14. package/plugin/agents/design-critic.md +80 -0
  15. package/plugin/dist/markilo.mjs +555 -0
  16. package/plugin/dist/pathkit.wasm +0 -0
  17. package/plugin/dist/resvg.wasm +0 -0
  18. package/plugin/evals/README.md +21 -0
  19. package/plugin/evals/asks-before-network/graders/asks.md +8 -0
  20. package/plugin/evals/asks-before-network/graders/no-network.md +9 -0
  21. package/plugin/evals/asks-before-network/prompt.md +13 -0
  22. package/plugin/evals/concept-verified/graders/looked.md +7 -0
  23. package/plugin/evals/concept-verified/graders/report.md +8 -0
  24. package/plugin/evals/concept-verified/graders/symbol.md +5 -0
  25. package/plugin/evals/concept-verified/graders/verified.md +7 -0
  26. package/plugin/evals/concept-verified/prompt.md +14 -0
  27. package/plugin/evals/doctor-smoke/graders/ran-doctor.md +7 -0
  28. package/plugin/evals/doctor-smoke/prompt.md +13 -0
  29. package/plugin/evals/locked-brand/graders/explains.md +8 -0
  30. package/plugin/evals/locked-brand/graders/locked.md +7 -0
  31. package/plugin/evals/locked-brand/graders/no-concept.md +9 -0
  32. package/plugin/evals/locked-brand/prompt.md +13 -0
  33. package/plugin/evals/refuses-copy/graders/refusal.md +8 -0
  34. package/plugin/evals/refuses-copy/prompt.md +13 -0
  35. package/plugin/evals/results/2026-10-30T00-24-04-123Z/aggregate-result.json +525 -0
  36. package/plugin/evals/results/2026-10-30T00-24-04-123Z/report.html +704 -0
  37. package/plugin/evals/results/2026-10-30T00-28-53-497Z/aggregate-result.json +119 -0
  38. package/plugin/evals/results/2026-10-30T00-28-53-497Z/report.html +282 -0
  39. package/plugin/evals/results/2026-10-30T00-29-38-075Z/aggregate-result.json +82 -0
  40. package/plugin/evals/results/2026-10-30T00-29-38-075Z/report.html +260 -0
  41. package/plugin/evals/results/2026-10-30T00-29-53-409Z/aggregate-result.json +119 -0
  42. package/plugin/evals/results/2026-10-30T00-29-53-409Z/report.html +282 -0
  43. package/plugin/evals/results/2026-10-30T00-30-34-064Z/aggregate-result.json +126 -0
  44. package/plugin/evals/results/2026-10-30T00-30-34-064Z/report.html +301 -0
  45. package/plugin/evals/results/2026-10-30T00-31-33-704Z/aggregate-result.json +119 -0
  46. package/plugin/evals/results/2026-10-30T00-31-33-704Z/report.html +282 -0
  47. package/plugin/evals/results/2026-10-30T00-32-27-214Z/aggregate-result.json +155 -0
  48. package/plugin/evals/results/2026-10-30T00-32-27-214Z/report.html +304 -0
  49. package/plugin/evals/results/2026-10-30T00-33-03-882Z/aggregate-result.json +544 -0
  50. package/plugin/evals/results/2026-10-30T00-33-03-882Z/report.html +701 -0
  51. package/plugin/evals/wordmark-outlined/graders/no-network.md +9 -0
  52. package/plugin/evals/wordmark-outlined/graders/sora.md +6 -0
  53. package/plugin/evals/wordmark-outlined/graders/svg-created.md +5 -0
  54. package/plugin/evals/wordmark-outlined/graders/used-wordmark.md +7 -0
  55. package/plugin/evals/wordmark-outlined/graders/workspace.md +5 -0
  56. package/plugin/evals/wordmark-outlined/prompt.md +13 -0
  57. package/plugin/fonts/dm-sans/OFL.txt +93 -0
  58. package/plugin/fonts/dm-sans/dm-sans-latin-400-normal.woff +0 -0
  59. package/plugin/fonts/dm-sans/dm-sans-latin-500-normal.woff +0 -0
  60. package/plugin/fonts/dm-sans/dm-sans-latin-600-normal.woff +0 -0
  61. package/plugin/fonts/dm-sans/dm-sans-latin-700-normal.woff +0 -0
  62. package/plugin/fonts/dm-sans/dm-sans-latin-800-normal.woff +0 -0
  63. package/plugin/fonts/dm-sans/dm-sans-latin-ext-400-normal.woff +0 -0
  64. package/plugin/fonts/dm-sans/dm-sans-latin-ext-500-normal.woff +0 -0
  65. package/plugin/fonts/dm-sans/dm-sans-latin-ext-600-normal.woff +0 -0
  66. package/plugin/fonts/dm-sans/dm-sans-latin-ext-700-normal.woff +0 -0
  67. package/plugin/fonts/dm-sans/dm-sans-latin-ext-800-normal.woff +0 -0
  68. package/plugin/fonts/fonts.json +386 -0
  69. package/plugin/fonts/fraunces/OFL.txt +93 -0
  70. package/plugin/fonts/fraunces/fraunces-latin-400-normal.woff +0 -0
  71. package/plugin/fonts/fraunces/fraunces-latin-500-normal.woff +0 -0
  72. package/plugin/fonts/fraunces/fraunces-latin-600-normal.woff +0 -0
  73. package/plugin/fonts/fraunces/fraunces-latin-700-normal.woff +0 -0
  74. package/plugin/fonts/fraunces/fraunces-latin-800-normal.woff +0 -0
  75. package/plugin/fonts/fraunces/fraunces-latin-ext-400-normal.woff +0 -0
  76. package/plugin/fonts/fraunces/fraunces-latin-ext-500-normal.woff +0 -0
  77. package/plugin/fonts/fraunces/fraunces-latin-ext-600-normal.woff +0 -0
  78. package/plugin/fonts/fraunces/fraunces-latin-ext-700-normal.woff +0 -0
  79. package/plugin/fonts/fraunces/fraunces-latin-ext-800-normal.woff +0 -0
  80. package/plugin/fonts/ibm-plex-serif/OFL.txt +93 -0
  81. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-400-normal.woff +0 -0
  82. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-500-normal.woff +0 -0
  83. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-600-normal.woff +0 -0
  84. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-700-normal.woff +0 -0
  85. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-400-normal.woff +0 -0
  86. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-500-normal.woff +0 -0
  87. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-600-normal.woff +0 -0
  88. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-700-normal.woff +0 -0
  89. package/plugin/fonts/inter/OFL.txt +93 -0
  90. package/plugin/fonts/inter/inter-latin-400-normal.woff +0 -0
  91. package/plugin/fonts/inter/inter-latin-500-normal.woff +0 -0
  92. package/plugin/fonts/inter/inter-latin-600-normal.woff +0 -0
  93. package/plugin/fonts/inter/inter-latin-700-normal.woff +0 -0
  94. package/plugin/fonts/inter/inter-latin-800-normal.woff +0 -0
  95. package/plugin/fonts/inter/inter-latin-ext-400-normal.woff +0 -0
  96. package/plugin/fonts/inter/inter-latin-ext-500-normal.woff +0 -0
  97. package/plugin/fonts/inter/inter-latin-ext-600-normal.woff +0 -0
  98. package/plugin/fonts/inter/inter-latin-ext-700-normal.woff +0 -0
  99. package/plugin/fonts/inter/inter-latin-ext-800-normal.woff +0 -0
  100. package/plugin/fonts/jetbrains-mono/OFL.txt +93 -0
  101. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-400-normal.woff +0 -0
  102. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-500-normal.woff +0 -0
  103. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-600-normal.woff +0 -0
  104. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-700-normal.woff +0 -0
  105. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-800-normal.woff +0 -0
  106. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-400-normal.woff +0 -0
  107. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-500-normal.woff +0 -0
  108. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-600-normal.woff +0 -0
  109. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-700-normal.woff +0 -0
  110. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-800-normal.woff +0 -0
  111. package/plugin/fonts/manrope/OFL.txt +93 -0
  112. package/plugin/fonts/manrope/manrope-latin-400-normal.woff +0 -0
  113. package/plugin/fonts/manrope/manrope-latin-500-normal.woff +0 -0
  114. package/plugin/fonts/manrope/manrope-latin-600-normal.woff +0 -0
  115. package/plugin/fonts/manrope/manrope-latin-700-normal.woff +0 -0
  116. package/plugin/fonts/manrope/manrope-latin-800-normal.woff +0 -0
  117. package/plugin/fonts/manrope/manrope-latin-ext-400-normal.woff +0 -0
  118. package/plugin/fonts/manrope/manrope-latin-ext-500-normal.woff +0 -0
  119. package/plugin/fonts/manrope/manrope-latin-ext-600-normal.woff +0 -0
  120. package/plugin/fonts/manrope/manrope-latin-ext-700-normal.woff +0 -0
  121. package/plugin/fonts/manrope/manrope-latin-ext-800-normal.woff +0 -0
  122. package/plugin/fonts/outfit/OFL.txt +93 -0
  123. package/plugin/fonts/outfit/outfit-latin-400-normal.woff +0 -0
  124. package/plugin/fonts/outfit/outfit-latin-500-normal.woff +0 -0
  125. package/plugin/fonts/outfit/outfit-latin-600-normal.woff +0 -0
  126. package/plugin/fonts/outfit/outfit-latin-700-normal.woff +0 -0
  127. package/plugin/fonts/outfit/outfit-latin-800-normal.woff +0 -0
  128. package/plugin/fonts/outfit/outfit-latin-ext-400-normal.woff +0 -0
  129. package/plugin/fonts/outfit/outfit-latin-ext-500-normal.woff +0 -0
  130. package/plugin/fonts/outfit/outfit-latin-ext-600-normal.woff +0 -0
  131. package/plugin/fonts/outfit/outfit-latin-ext-700-normal.woff +0 -0
  132. package/plugin/fonts/outfit/outfit-latin-ext-800-normal.woff +0 -0
  133. package/plugin/fonts/plus-jakarta-sans/OFL.txt +93 -0
  134. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-400-normal.woff +0 -0
  135. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-500-normal.woff +0 -0
  136. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-600-normal.woff +0 -0
  137. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-700-normal.woff +0 -0
  138. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-800-normal.woff +0 -0
  139. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-400-normal.woff +0 -0
  140. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-500-normal.woff +0 -0
  141. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-600-normal.woff +0 -0
  142. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-700-normal.woff +0 -0
  143. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-800-normal.woff +0 -0
  144. package/plugin/fonts/sora/OFL.txt +93 -0
  145. package/plugin/fonts/sora/sora-latin-400-normal.woff +0 -0
  146. package/plugin/fonts/sora/sora-latin-500-normal.woff +0 -0
  147. package/plugin/fonts/sora/sora-latin-600-normal.woff +0 -0
  148. package/plugin/fonts/sora/sora-latin-700-normal.woff +0 -0
  149. package/plugin/fonts/sora/sora-latin-800-normal.woff +0 -0
  150. package/plugin/fonts/sora/sora-latin-ext-400-normal.woff +0 -0
  151. package/plugin/fonts/sora/sora-latin-ext-500-normal.woff +0 -0
  152. package/plugin/fonts/sora/sora-latin-ext-600-normal.woff +0 -0
  153. package/plugin/fonts/sora/sora-latin-ext-700-normal.woff +0 -0
  154. package/plugin/fonts/sora/sora-latin-ext-800-normal.woff +0 -0
  155. package/plugin/fonts/space-grotesk/OFL.txt +93 -0
  156. package/plugin/fonts/space-grotesk/space-grotesk-latin-400-normal.woff +0 -0
  157. package/plugin/fonts/space-grotesk/space-grotesk-latin-500-normal.woff +0 -0
  158. package/plugin/fonts/space-grotesk/space-grotesk-latin-600-normal.woff +0 -0
  159. package/plugin/fonts/space-grotesk/space-grotesk-latin-700-normal.woff +0 -0
  160. package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-400-normal.woff +0 -0
  161. package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-500-normal.woff +0 -0
  162. package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-600-normal.woff +0 -0
  163. package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-700-normal.woff +0 -0
  164. package/plugin/skills/audit/SKILL.md +22 -0
  165. package/plugin/skills/concepts/SKILL.md +35 -0
  166. package/plugin/skills/design/SKILL.md +126 -0
  167. package/plugin/skills/design/references/cli.md +95 -0
  168. package/plugin/skills/design/references/construction.md +221 -0
  169. package/plugin/skills/design/references/design-principles.md +133 -0
  170. package/plugin/skills/design/references/originality.md +44 -0
  171. package/plugin/skills/design/references/research-playbook.md +95 -0
  172. package/plugin/skills/design/references/svg-authoring.md +50 -0
  173. package/plugin/skills/design/references/workflow.md +79 -0
  174. package/plugin/skills/export/SKILL.md +36 -0
  175. package/plugin/skills/gallery/SKILL.md +29 -0
  176. package/plugin/skills/markilo/SKILL.md +12 -0
  177. package/plugin/skills/originality/SKILL.md +25 -0
  178. package/plugin/skills/refine/SKILL.md +25 -0
  179. package/plugin/skills/research/SKILL.md +28 -0
@@ -0,0 +1,50 @@
1
+ # SVG authoring rules for Markilo masters
2
+
3
+ `markilo svg lint --master` and `markilo verify` enforce these. Build symbols with `markilo construct`
4
+ (see `construction.md`): it produces masters that already follow these rules. Write SVG by hand only for parts no
5
+ construction shape can express.
6
+
7
+ ## Required
8
+
9
+ - Root: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 W H" data-markilo-role="symbol">`.
10
+ Symbols use a **square** viewBox (e.g. `0 0 120 120` or `0 0 48 48`). No `width`/`height` needed.
11
+ - Include `<title>Brand — symbol</title>` for accessibility.
12
+ - **Filled shapes only** in masters. If you sketch with strokes, convert them to filled outlines before
13
+ delivery (rect/path geometry). Strokes are allowed in drafts but scale with the viewBox and can vanish
14
+ at small sizes.
15
+ - Solid colors as `fill="#rrggbb"`. Every color must come from the concept palette.
16
+ - Pure vector: no `<image>`, no embedded PNG/JPEG/base64, no external references, no `<script>`,
17
+ no `<foreignObject>`, no event handlers, no web fonts, no live `<text>` (use `markilo wordmark`).
18
+ - No filters (blur, drop shadow) and no opacity in masters. Gradients only if a flat version also works.
19
+ - Unique, meaningful ids only when referenced (masks, clip paths).
20
+
21
+ ## Geometry
22
+
23
+ - Snap coordinates to the construction grid; use integers or one decimal where possible.
24
+ - Keep the mark inside the artboard with a small margin: ink should span 80–98% of the viewBox.
25
+ - Use `fill-rule="evenodd"` for counters (holes) inside one path when it keeps the path simple.
26
+ - Prefer arcs (`a`) and straight segments over many tiny curve segments; prefer a few precise cubic
27
+ Béziers over auto-traced noise. Keep total path commands low (verify reports complexity).
28
+ - Round corners with arcs of consistent radius across the mark.
29
+ - For overlaps that should read as separate parts in one color, cut a real gap: ≥ 1/13 of the artboard (≥ 80 units
30
+ on 1024), which is 1.2 px at 16 px — the verify threshold. Under 1/23 (~45 units) fails.
31
+
32
+ ## Example (structure only — do not reuse the shape)
33
+
34
+ ```svg
35
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" data-markilo-role="symbol">
36
+ <title>Example — symbol</title>
37
+ <path fill="#2f4bd8" d="M22 24a6 6 0 0 1 6-6h16v84H28a6 6 0 0 1-6-6z"/>
38
+ <path fill="#2f4bd8" fill-rule="evenodd" d="M60 30a30 30 0 1 1 0 60a30 30 0 1 1 0-60zm0 14a16 16 0 1 0 0 32a16 16 0 1 0 0-32z"/>
39
+ </svg>
40
+ ```
41
+
42
+ ## Wordmarks and lockups
43
+
44
+ - Generate with `markilo wordmark --text … --font … --weight … -o wordmark.svg`; it embeds cap-height and
45
+ baseline metadata used by `markilo lockup` and `finalize`.
46
+ - Tune tracking in thousandths of an em (`--tracking=-15` tight display, `0` default, `+40` airy caps).
47
+ - Manual letter edits are allowed after generation: edit individual `<path data-char="…">` elements and
48
+ keep the root attributes.
49
+ - Hand-made lockups are optional; `finalize` builds horizontal, stacked and compact lockups aligned to
50
+ cap height with clear space = 1 cap height.
@@ -0,0 +1,79 @@
1
+ # Workflow details
2
+
3
+ ## Stage gates
4
+
5
+ | Stage | Done when | Saved in |
6
+ | -------- | ------------------------------------------------------------------------------------ | --------------------------------- |
7
+ | Discover | Sources scanned, existing identity seen, mode chosen (new/refresh/redesign/evaluate) | profile.json, brief.json `mode` |
8
+ | Research | Each topic covered or listed as a gap; references collected | profile.json, research/references |
9
+ | Brief | Brief validates; user confirmed the key trade-offs | brief.json, answers.json |
10
+ | Explore | 3–5 directions, each with idea sentence, form language, type, color, risk | decisions.md |
11
+ | Design | Each direction has symbol.svg (+ wordmark.svg) and concept.json | concepts/<id>/ |
12
+ | Verify | No `fail` checks, originality not `redesign`, diversity low, critic scores recorded | reports/, concept.json `judgment` |
13
+ | Review | User has seen the gallery and chosen | answers.json, concept status |
14
+ | Refine | Chosen concept re-verified after every change; finalized | final/ |
15
+ | Export | Export ran without skipped groups the user needs | exports/ |
16
+ | Deliver | User has paths, guidelines, quality + originality summary, limitations | — |
17
+
18
+ Append one dated line per significant decision to `brand/brands/<slug>/decisions.md` (Edit the file):
19
+ what was decided, why, and the evidence.
20
+
21
+ ## Choosing the mode
22
+
23
+ - **evaluate**: the user wants an opinion or the brand is locked. Run `markilo score` / `analyze` /
24
+ `compare` on existing files, then report strengths, risks and recommendations without designing.
25
+ - **refresh**: equity is strong but craft is weak → keep the idea, rebuild geometry, wordmark, palette.
26
+ - **redesign**: the mark fails measurably or contradicts the strategy → new directions.
27
+ - **new**: no identity exists.
28
+
29
+ Recommend a mode with evidence (measurements of the current mark + findings) and let the user decide.
30
+
31
+ ## Partial requests
32
+
33
+ - "Research X": Discover + Research + Brief, then stop with a summary of the profile.
34
+ - "Check this logo": evaluate mode (`score`, `analyze`, `compare` against references, `name check`).
35
+ - "Make variations of concept A": Refine.
36
+ - "Export / give me favicons": Export (+ `install-assets` dry run).
37
+ - "Show me": `markilo gallery`.
38
+
39
+ ## Monorepos
40
+
41
+ 1. `markilo research monorepo <repo>` lists packages with `kind` (site, app, client, library, service) and whether they
42
+ are `brandable` (user-facing). Libraries and services are not brands.
43
+ 2. Agree with the user on: the master brand, which packages get their own identity, which are locked (preserved), and
44
+ the parent of each (e.g. apps living inside a platform product).
45
+ 3. `markilo research monorepo <repo> --register --groups products,apps --parent <master> --lock <slugs> --scan` creates the
46
+ brands, stores each package folder in the brief's `codePaths`, and scans each one into its own profile. Run it once
47
+ per parent if different groups have different parents.
48
+ 4. Read the design-system docs and icon sets the scans report before proposing anything — an existing system is
49
+ equity.
50
+ 5. Scale the work: master + family system first; sites one at a time; many apps (10+) are usually best served by a
51
+ shared **app icon system** (one grid, one container shape, one color logic, a distinct glyph per app) rather than
52
+ separate identities. Do apps in batches of 4–6 concept-designer agents.
53
+ 6. To place exports back into the repo from a separate brand folder:
54
+ `markilo install-assets --brand <slug> --group web --into public --project <repo>/<package>` (dry run, then `--apply`
55
+ after the user agrees).
56
+
57
+ ## Multi-product families
58
+
59
+ 1. `markilo init --family "<Family>"`, then `brand add` for the master brand and each product
60
+ (`--role product --parent <master>`). Locked members: `brand add "<Name>" --locked` then
61
+ `markilo lock --brand <slug> --symbol … --primary …`.
62
+ 2. Research the family once (master brand), then product-specific facts per product.
63
+ 3. Sketch the family as one system, not the master alone: every sketch spec of a family direction has a `members`
64
+ block (one parameter set, and colours if they differ, per product — construction.md → Families). `markilo
65
+ sketches` draws master and members together on `sketches/family.png` and marks a sketch not ready when two members
66
+ read as the same mark (same shape and close colours); members told apart only by colour get a note. The sketch
67
+ review judges the system: do the members belong together, and can each be told apart at 16 px?
68
+ 4. When the master passes the gate, build each product from the same spec: `markilo concept new --brand <product> …`,
69
+ then `markilo construct <spec> --brand <product> --concept <id> --member <name>` (its parameters and colours),
70
+ `markilo verify`, and a critique per product. Record the system (construction, colour logic) in
71
+ `shared/system.json`.
72
+ 5. Products that need their own idea (an acquired brand, a different audience) are designed separately with the
73
+ concept-designer agent, inside the shared system.
74
+
75
+ ## Using Markilo from another project
76
+
77
+ The workspace lives in the user's project at `./brand` (add it to their VCS or not — their choice; raw
78
+ research captures are git-ignored automatically). Nothing outside `./brand` changes unless the user
79
+ approves `install-assets --apply`.
@@ -0,0 +1,36 @@
1
+ ---
2
+
3
+ name: export
4
+ description: Markilo asset export — generate the complete brand asset kit from the approved identity (logo variants, favicons, PWA, iOS, Android, macOS, Windows icons, social and marketing images, tokens, guidelines) and optionally install web assets into the project. Use when the user wants logo files, favicons, app icons or a brand kit.
5
+ argument-hint: "[brand slug] [groups, e.g. web,ios]"
6
+ allowed-tools: Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" *) Bash(node ${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs *) Read Write Edit Glob Grep
7
+ ---
8
+
9
+ # Markilo · Export
10
+
11
+ Request: $ARGUMENTS
12
+
13
+ Toolchain: `node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command>` (written `markilo`). Run every toolchain command as its own Bash call, written out in full (`node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command> …`). Do not wrap it in shell variables, `cd`, `&&` chains or pipes: the plugin pre-approves exactly that form, so anything else triggers permission prompts.
14
+
15
+ 1. `markilo status`. If the brand has no approved kit: for a designed concept run `markilo finalize`; for an existing
16
+ identity the user wants to keep as-is, use `markilo lock --brand <slug> --symbol … --primary …` (exact copy).
17
+ 2. **Choose the package once.** Run `markilo deliverables --brand <slug>`. If `source` is `brief`, the user already
18
+ chose; go on. If it is `suggested`, tell the user in one short message what you will prepare, in plain words, and
19
+ offer the left-out groups in the same message as one question, for example: "For a web app I'll prepare the logo
20
+ files, web icons, link-preview images, color/type tokens and the guidelines. Should I add mobile app icons, desktop
21
+ app icons or print items (business card, email signature)?" Save the answer with
22
+ `markilo deliverables --brand <slug> --set …` (or `--add` / `--remove`) and record it with `markilo answers`.
23
+ If the user already said "everything" or "just do it", keep the suggestion and don't ask.
24
+ 3. `markilo export --brand <slug>` (it exports the chosen groups; `--only web,ios,…` or `--all` override). Read the
25
+ summary: files per group, `notIncluded`, skipped groups, warnings.
26
+ 4. Spot-check a few outputs visually with `Read` (e.g. `exports/web/icon-maskable-512.png`,
27
+ `exports/ios/AppIcon.appiconset/AppIcon-1024.png`, `exports/social/og-image.png`).
28
+ 5. `markilo gallery` to refresh the preview.
29
+ 6. To place assets in the user's project, plan first: `markilo install-assets --brand <slug> --framework auto
30
+ [--project <dir>]`. It detects Next.js, Laravel, Flutter or a static site and lists where each file goes and what
31
+ (if anything) the user must add by hand (a head snippet). Show the plan; only with the user's OK re-run with
32
+ `--apply` (and `--force` only if they want existing icons replaced — those are backed up to `.markilo-backup/`).
33
+ Do not edit their source files; give them the snippet instead.
34
+ 7. Tell the user where everything is (`exports/`, `asset-manifest.json`, `guidelines/index.html`), that more groups
35
+ can be added any time (`markilo deliverables --add ios` then `markilo export`), and mention that
36
+ X (Twitter) header sizes could not be verified against x.com documentation.
@@ -0,0 +1,29 @@
1
+ ---
2
+
3
+ name: gallery
4
+ description: Markilo Brand Preview Gallery — build and open the local HTML gallery that compares concepts and shows every variant on realistic surfaces (browser tab, app icons, dock, store listing, social preview, business card) with quality and originality results. Use when the user wants to see, compare or review designs.
5
+ argument-hint: "[brand slug]"
6
+ allowed-tools: Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" *) Bash(node ${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs *) Read Write Edit Glob Grep
7
+ ---
8
+
9
+ # Markilo · Gallery
10
+
11
+ Request: $ARGUMENTS
12
+
13
+ Toolchain: `node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command>` (written `markilo`). Run every toolchain command as its own Bash call, written out in full (`node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command> …`). Do not wrap it in shell variables, `cd`, `&&` chains or pipes: the plugin pre-approves exactly that form, so anything else triggers permission prompts.
14
+
15
+ 1. Preferred: start `markilo gallery --serve` as a **background** Bash command (it keeps running). Its first output
16
+ line has `serving`: a `http://127.0.0.1:<port>/…?t=<token>` URL. Give the user that URL. The server only listens
17
+ on this computer, needs the token, serves only the gallery and exported artwork, and stops by itself when idle.
18
+ Without a background shell, run `markilo gallery` instead: it writes `brand/gallery/index.html`, a self-contained
19
+ file that works offline; give the user its `file://` URL.
20
+ 2. Explain the review flow in two lines: on each concept choose Keep / Refine / Drop, add revision tags or a note, click
21
+ on the big mark to pin what should change at that spot, tick "Compare" on two or more concepts to see them side by
22
+ side and mark one "Prefer this". Then press **Send to Claude** (served) or **Download decisions** (file) and tell
23
+ you when done.
24
+ 3. Read the decisions: `markilo feedback --brand <slug>` (after a download: `markilo feedback --import <file>`). It
25
+ returns each decision with tags, notes and pinned spots (e.g. "at top-right: thicker stem"), the preferred concept
26
+ and ready-to-act requests. Repeat them back to the user in one short summary.
27
+ 4. Act: `markilo feedback --brand <slug> --apply` marks dropped concepts rejected and kept ones shortlisted (only after
28
+ the user confirmed the summary). Log what was decided (`markilo answers`) and continue with the refine skill for
29
+ each "refine" request — pinned spots tell you where on the mark the change belongs.
@@ -0,0 +1,12 @@
1
+ ---
2
+
3
+ name: markilo
4
+ description: Markilo entry point (same as markilo:design). Use when the user types /markilo or asks Markilo for anything brand-related.
5
+ argument-hint: "[URL, repo path, brand name or task]"
6
+ allowed-tools: Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" *) Bash(node ${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs *) Read Write Edit Glob Grep Skill
7
+ ---
8
+
9
+ Request: $ARGUMENTS
10
+
11
+ Load the `markilo:design` skill (Skill tool) and follow it for this request. If you only need a quick toolchain
12
+ command, run it as `node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command>` — never as a bare `markilo` command, and never through shell variables, `cd` or `&&` chains (the plugin pre-approves exactly that form).
@@ -0,0 +1,25 @@
1
+ ---
2
+
3
+ name: originality
4
+ description: Markilo market intelligence and originality check — compare a logo concept or existing mark against competitor and category marks (silhouette, perceptual hash, structure, color), check name confusion and plan trademark pre-screening, and write an Originality & Similarity Report. Use when the user asks whether a logo or name is original, similar to others, or safe to use.
5
+ argument-hint: "[brand slug, concept id, or path to a logo file]"
6
+ allowed-tools: Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" *) Bash(node ${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs *) Read Write Edit Glob Grep WebSearch WebFetch
7
+ ---
8
+
9
+ # Markilo · Originality
10
+
11
+ Request: $ARGUMENTS
12
+
13
+ Toolchain: `node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command>` (written `markilo`). Run every toolchain command as its own Bash call, written out in full (`node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command> …`). Do not wrap it in shell variables, `cd`, `&&` chains or pipes: the plugin pre-approves exactly that form, so anything else triggers permission prompts. Policy: `${CLAUDE_PLUGIN_ROOT}/skills/design/references/originality.md`.
14
+
15
+ - **A concept in the workspace**: make sure references exist (`markilo reference list --brand <slug>`); if fewer than ~5,
16
+ collect more (competitors, category leaders, famous marks with a similar form) and add them with `markilo reference add`
17
+ — ask before web searches that reveal unreleased names. Then `markilo originality --brand <slug> --concept <id>` and
18
+ `markilo diversity --brand <slug>`.
19
+ - **A loose file** (any SVG/PNG): `markilo analyze <file>` and `markilo compare <file> <reference>` for each reference.
20
+ - **A name**: `markilo name check "<Name>" --against <competitors>` and `markilo name trademark "<Name>" --describe "<product>"`.
21
+ If the user agrees, run registry searches via the links and log each with `markilo profile add-source --type registry`.
22
+
23
+ Report in plain language: the verdict, the top matches with their numbers and reasons, what was and was not compared,
24
+ and the limits (not legal advice; no results ≠ unique). Recommend redesign for high risk instead of small tweaks.
25
+ Open the report file path for the user: `brand/brands/<slug>/reports/originality-<id>.md`.
@@ -0,0 +1,25 @@
1
+ ---
2
+
3
+ name: refine
4
+ description: Markilo refinement — iterate on a chosen logo concept (geometry, optical corrections, wordmark spacing, palette, small-size version) with verification after every change, then finalize it as the approved identity. Use when the user picks a concept or asks for changes to one.
5
+ argument-hint: "[brand slug, concept id and the feedback]"
6
+ allowed-tools: Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" *) Bash(node ${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs *) Read Write Edit Glob Grep
7
+ ---
8
+
9
+ # Markilo · Refine and finalize
10
+
11
+ Request: $ARGUMENTS
12
+
13
+ Toolchain: `node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command>` (written `markilo`). Run every toolchain command as its own Bash call, written out in full (`node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command> …`). Do not wrap it in shell variables, `cd`, `&&` chains or pipes: the plugin pre-approves exactly that form, so anything else triggers permission prompts. Craft rules: `${CLAUDE_PLUGIN_ROOT}/skills/design/references/design-principles.md`, `${CLAUDE_PLUGIN_ROOT}/skills/design/references/svg-authoring.md`.
14
+
15
+ 1. Read the concept (`concepts/<id>/concept.json`, `symbol.svg`, `wordmark.svg`) and its reports. Collect the user's
16
+ feedback (gallery notes may be pasted in) and log it with `markilo answers`.
17
+ 2. Decide whether the change is a refinement (edit in place) or a new variant (copy to a new concept id, e.g. `<id>-b`,
18
+ with `markilo concept new`). Keep the original for comparison.
19
+ 3. Apply professional refinements: snap to the grid, unify radii and stroke weights, optical overshoot, ink traps,
20
+ open counters for 16 px, real gaps instead of color-only separation, balanced artboard fit. Regenerate the
21
+ wordmark with adjusted tracking or weight if needed; hand-edit individual letters when the idea calls for it.
22
+ 4. After every change: `markilo verify --brand <slug> --concept <id>` and `Read` the review sheet. Stop when there are
23
+ no fails and the warnings are understood.
24
+ 5. When the user approves: `markilo finalize --brand <slug> --concept <id> --tagline "<tagline>"`, append the decision to
25
+ `decisions.md`, then offer the export.
@@ -0,0 +1,28 @@
1
+ ---
2
+
3
+ name: research
4
+ description: Markilo brand research only — scan a repository or website, research the market, audience, competitors, category conventions, culture and trademarks, and build a sourced Brand Intelligence Profile and brief. Use when the user asks to research or analyze a brand before any design.
5
+ argument-hint: "[URL, repo path or brand name]"
6
+ allowed-tools: Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" *) Bash(node ${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs *) Read Write Edit Glob Grep WebSearch WebFetch
7
+ ---
8
+
9
+ # Markilo · Research
10
+
11
+ Request: $ARGUMENTS
12
+
13
+ Toolchain: `node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command>` (written `markilo`). Run every toolchain command as its own Bash call, written out in full (`node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command> …`). Do not wrap it in shell variables, `cd`, `&&` chains or pipes: the plugin pre-approves exactly that form, so anything else triggers permission prompts. Read `${CLAUDE_PLUGIN_ROOT}/skills/design/references/research-playbook.md` and `${CLAUDE_PLUGIN_ROOT}/skills/design/references/cli.md` first.
14
+
15
+ 1. Find or create the workspace: `markilo status` — with `found: false`, `markilo init` and `markilo brand add "<Name>"`.
16
+ 2. Check what is already known: `markilo profile show --brand <slug>` and `markilo answers --brand <slug>`.
17
+ Do not repeat finished research; extend it.
18
+ 3. Local sources: for repositories run `markilo research monorepo <path>` first. Several sites/apps → confirm the list and
19
+ locked members with the user, then `markilo research monorepo <path> --register --groups … --parent <master> --lock … --scan`
20
+ (one call researches every package). Single project → `markilo research repo <path> --brand <slug>`. Read the design
21
+ docs and icon sets the scan reports. `Read` the existing logo files it lists.
22
+ 4. Website: ask the user before fetching. Then `markilo research site <url> --brand <slug> --allow-network`.
23
+ 5. Market research: delegate to the `markilo:brand-researcher` agent with the brand slug, what is known, and which
24
+ topics are missing. For a small brand, do it yourself following the playbook.
25
+ 6. Write the brief: `markilo brief update --brand <slug> --file <patch.json>` (write the patch to a temp file first).
26
+ 7. Ask the user only the open questions that change the design (batched, each with your suggested answer), and log them.
27
+ 8. Finish with a short summary: what the brand is, who it is for, the competitive landscape and category codes,
28
+ opportunities for distinctiveness, risks, and open gaps. Mark inferences as inferences.