markilo 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +10 -0
- package/README.md +348 -2
- package/THIRD_PARTY_NOTICES.md +72 -0
- package/package.json +89 -4
- package/plugin/.claude-plugin/icon.png +0 -0
- package/plugin/.claude-plugin/plugin.json +24 -0
- package/plugin/LICENSE +202 -0
- package/plugin/NOTICE +10 -0
- package/plugin/README.md +14 -0
- package/plugin/THIRD_PARTY_NOTICES.md +72 -0
- package/plugin/agents/brand-researcher.md +46 -0
- package/plugin/agents/concept-designer.md +91 -0
- package/plugin/agents/design-critic.md +109 -0
- package/plugin/dist/markilo.mjs +622 -0
- package/plugin/dist/pathkit.wasm +0 -0
- package/plugin/dist/resvg.wasm +0 -0
- package/plugin/evals/README.md +21 -0
- package/plugin/evals/asks-before-network/graders/asks.md +8 -0
- package/plugin/evals/asks-before-network/graders/no-network.md +9 -0
- package/plugin/evals/asks-before-network/prompt.md +13 -0
- package/plugin/evals/concept-verified/graders/looked.md +7 -0
- package/plugin/evals/concept-verified/graders/report.md +8 -0
- package/plugin/evals/concept-verified/graders/symbol.md +5 -0
- package/plugin/evals/concept-verified/graders/verified.md +7 -0
- package/plugin/evals/concept-verified/prompt.md +14 -0
- package/plugin/evals/doctor-smoke/graders/ran-doctor.md +7 -0
- package/plugin/evals/doctor-smoke/prompt.md +13 -0
- package/plugin/evals/locked-brand/graders/explains.md +8 -0
- package/plugin/evals/locked-brand/graders/locked.md +7 -0
- package/plugin/evals/locked-brand/graders/no-concept.md +9 -0
- package/plugin/evals/locked-brand/prompt.md +13 -0
- package/plugin/evals/refuses-copy/graders/refusal.md +8 -0
- package/plugin/evals/refuses-copy/prompt.md +13 -0
- package/plugin/evals/results/2026-10-30T00-24-04-123Z/aggregate-result.json +525 -0
- package/plugin/evals/results/2026-10-30T00-24-04-123Z/report.html +704 -0
- package/plugin/evals/results/2026-10-30T00-28-53-497Z/aggregate-result.json +119 -0
- package/plugin/evals/results/2026-10-30T00-28-53-497Z/report.html +282 -0
- package/plugin/evals/results/2026-10-30T00-29-38-075Z/aggregate-result.json +82 -0
- package/plugin/evals/results/2026-10-30T00-29-38-075Z/report.html +260 -0
- package/plugin/evals/results/2026-10-30T00-29-53-409Z/aggregate-result.json +119 -0
- package/plugin/evals/results/2026-10-30T00-29-53-409Z/report.html +282 -0
- package/plugin/evals/results/2026-10-30T00-30-34-064Z/aggregate-result.json +126 -0
- package/plugin/evals/results/2026-10-30T00-30-34-064Z/report.html +301 -0
- package/plugin/evals/results/2026-10-30T00-31-33-704Z/aggregate-result.json +119 -0
- package/plugin/evals/results/2026-10-30T00-31-33-704Z/report.html +282 -0
- package/plugin/evals/results/2026-10-30T00-32-27-214Z/aggregate-result.json +155 -0
- package/plugin/evals/results/2026-10-30T00-32-27-214Z/report.html +304 -0
- package/plugin/evals/results/2026-10-30T00-33-03-882Z/aggregate-result.json +544 -0
- package/plugin/evals/results/2026-10-30T00-33-03-882Z/report.html +701 -0
- package/plugin/evals/wordmark-outlined/graders/no-network.md +9 -0
- package/plugin/evals/wordmark-outlined/graders/sora.md +6 -0
- package/plugin/evals/wordmark-outlined/graders/svg-created.md +5 -0
- package/plugin/evals/wordmark-outlined/graders/used-wordmark.md +7 -0
- package/plugin/evals/wordmark-outlined/graders/workspace.md +5 -0
- package/plugin/evals/wordmark-outlined/prompt.md +13 -0
- package/plugin/fonts/alegreya-sans/OFL.txt +93 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-400-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-500-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-700-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-800-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/archivo/OFL.txt +93 -0
- package/plugin/fonts/archivo/archivo-latin-400-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-500-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-600-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-700-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-800-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-900-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-900-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/OFL.txt +93 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-400-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-500-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-600-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-700-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-800-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/OFL.txt +93 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-400-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-500-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-600-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-700-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-800-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/dm-sans/OFL.txt +93 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-400-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-500-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-600-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-700-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-800-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/dm-sans/dm-sans-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/dm-serif-display/OFL.txt +93 -0
- package/plugin/fonts/dm-serif-display/dm-serif-display-latin-400-normal.woff +0 -0
- package/plugin/fonts/dm-serif-display/dm-serif-display-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/OFL.txt +93 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-400-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-500-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-600-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-700-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/fonts.json +1014 -0
- package/plugin/fonts/fraunces/OFL.txt +93 -0
- package/plugin/fonts/fraunces/fraunces-latin-400-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-500-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-600-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-700-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-800-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/fraunces/fraunces-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/ibm-plex-serif/OFL.txt +93 -0
- package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-400-normal.woff +0 -0
- package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-500-normal.woff +0 -0
- package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-600-normal.woff +0 -0
- package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-700-normal.woff +0 -0
- package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/instrument-serif/OFL.txt +93 -0
- package/plugin/fonts/instrument-serif/instrument-serif-latin-400-normal.woff +0 -0
- package/plugin/fonts/instrument-serif/instrument-serif-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/inter/OFL.txt +93 -0
- package/plugin/fonts/inter/inter-latin-400-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-500-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-600-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-700-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-800-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/inter/inter-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/OFL.txt +93 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-400-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-500-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-600-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-700-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-800-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/manrope/OFL.txt +93 -0
- package/plugin/fonts/manrope/manrope-latin-400-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-500-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-600-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-700-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-800-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/manrope/manrope-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/newsreader/OFL.txt +93 -0
- package/plugin/fonts/newsreader/newsreader-latin-400-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-500-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-600-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-700-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-800-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/outfit/OFL.txt +93 -0
- package/plugin/fonts/outfit/outfit-latin-400-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-500-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-600-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-700-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-800-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/outfit/outfit-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/OFL.txt +93 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-400-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-500-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-600-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-700-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-800-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/OFL.txt +93 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-400-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-500-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-600-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-700-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-800-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-900-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-900-normal.woff +0 -0
- package/plugin/fonts/sora/OFL.txt +93 -0
- package/plugin/fonts/sora/sora-latin-400-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-500-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-600-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-700-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-800-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/sora/sora-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/space-grotesk/OFL.txt +93 -0
- package/plugin/fonts/space-grotesk/space-grotesk-latin-400-normal.woff +0 -0
- package/plugin/fonts/space-grotesk/space-grotesk-latin-500-normal.woff +0 -0
- package/plugin/fonts/space-grotesk/space-grotesk-latin-600-normal.woff +0 -0
- package/plugin/fonts/space-grotesk/space-grotesk-latin-700-normal.woff +0 -0
- package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/space-mono/OFL.txt +93 -0
- package/plugin/fonts/space-mono/space-mono-latin-400-normal.woff +0 -0
- package/plugin/fonts/space-mono/space-mono-latin-700-normal.woff +0 -0
- package/plugin/fonts/space-mono/space-mono-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/space-mono/space-mono-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/syne/OFL.txt +93 -0
- package/plugin/fonts/syne/syne-latin-400-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-500-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-600-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-700-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-800-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/unbounded/OFL.txt +93 -0
- package/plugin/fonts/unbounded/unbounded-latin-400-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-500-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-600-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-700-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-800-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-900-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-900-normal.woff +0 -0
- package/plugin/fonts/young-serif/OFL.txt +93 -0
- package/plugin/fonts/young-serif/young-serif-latin-400-normal.woff +0 -0
- package/plugin/fonts/young-serif/young-serif-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/OFL.txt +93 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-400-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-500-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-600-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-700-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-ext-700-normal.woff +0 -0
- package/plugin/skills/audit/SKILL.md +22 -0
- package/plugin/skills/concepts/SKILL.md +35 -0
- package/plugin/skills/design/SKILL.md +149 -0
- package/plugin/skills/design/references/cli.md +96 -0
- package/plugin/skills/design/references/construction.md +254 -0
- package/plugin/skills/design/references/design-principles.md +163 -0
- package/plugin/skills/design/references/originality.md +44 -0
- package/plugin/skills/design/references/research-playbook.md +95 -0
- package/plugin/skills/design/references/svg-authoring.md +50 -0
- package/plugin/skills/design/references/workflow.md +79 -0
- package/plugin/skills/export/SKILL.md +38 -0
- package/plugin/skills/gallery/SKILL.md +30 -0
- package/plugin/skills/markilo/SKILL.md +12 -0
- package/plugin/skills/originality/SKILL.md +25 -0
- package/plugin/skills/refine/SKILL.md +25 -0
- package/plugin/skills/research/SKILL.md +28 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
name: design-critic
|
|
4
|
+
description: Gives an independent, candid visual critique of Markilo logo concepts — reviews the rendered sheets at all sizes, scores brand fit, distinctiveness, memorability, craft and other judgment criteria with reasons, and records them. Use after concepts are verified and before presenting them to the user.
|
|
5
|
+
tools: Read, Glob, Bash
|
|
6
|
+
model: opus
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are an experienced, demanding identity design critic. You did not design these concepts. Be specific and honest;
|
|
10
|
+
praise only what earns it.
|
|
11
|
+
|
|
12
|
+
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. Criteria: the "Judgment criteria" section of `${CLAUDE_PLUGIN_ROOT}/skills/design/references/design-principles.md`.
|
|
13
|
+
|
|
14
|
+
**Sketch review** (when the caller asks for it, before concepts are developed): for each concept, `Read`
|
|
15
|
+
`concepts/<id>/sketches/board.png` first, then `concept.json` (direction and rationale) and the brief. Judge ideas,
|
|
16
|
+
not finish, in this order:
|
|
17
|
+
1. **Read before you know.** For every sketch, write the first thing a stranger would see in it, before reading what
|
|
18
|
+
it is meant to be; then compare with the hook the sketch's idea names (`board.json` → `caption`). For a word,
|
|
19
|
+
then read `board.json` → `notes`: measured letter changes (a letter that lost its counter, two letters that merged)
|
|
20
|
+
— say whether the whole word still reads as the name. For a family,
|
|
21
|
+
also `Read` `sketches/family.png`: do the members belong together, and can each be told apart at 16 px? A sketch
|
|
22
|
+
`markilo sketches` marks as not `ready` goes back to the designer with its `fix`, unreviewed.
|
|
23
|
+
2. **Strike** every sketch whose first reading is a UI icon, a known logo, a different letter, a cliché, the
|
|
24
|
+
name's initial with a cut (split, sliced, offset, stepped or nested — design-principles.md), a form language that
|
|
25
|
+
contradicts the brief's adjectives (UI geometry for a handmade brand, a sticker for an enterprise one), or the
|
|
26
|
+
product's own object drawn plainly (a page or folded corner for documents and invoices, bars or tally marks for
|
|
27
|
+
finance, a moon or stars for sleep, a padlock for privacy — see "The product's own object is a cliché too" in
|
|
28
|
+
`skills/design/references/design-principles.md`), and every sketch that does not survive 16 px.
|
|
29
|
+
3. **Pick** the strongest sketch that survived step 2: the one whose first reading is closest to its idea and that
|
|
30
|
+
has the most room to become ownable. Pick `none` only when step 2 struck every sketch. Do not predict the finished
|
|
31
|
+
mark — the gate does that, cold, after development. In Markilo's benchmark a sketch review that also had to bet on
|
|
32
|
+
the finished score stopped nine directions in ten, while the marks that did get through were judged as well as
|
|
33
|
+
any. Your notes are what the developer works from: name the risks you see and what must change.
|
|
34
|
+
4. Record it: `markilo concept update --brand <slug> --concept <id> --sketch-pick <sN|none> --sketch-notes
|
|
35
|
+
"Reads as: <s1 …; s2 …>. <what to keep and fix, or for none the different move to try>"`.
|
|
36
|
+
|
|
37
|
+
Final answer ≤ 150 words. Do not score the full criteria in a sketch review.
|
|
38
|
+
|
|
39
|
+
**Idea review** (when the caller asks for it, before anything is drawn): `markilo ideas --brand <slug>` lists the
|
|
40
|
+
longlist; read the brief too. For each idea, from the words alone, write the first thing a stranger would see if it were
|
|
41
|
+
drawn plainly at 32 px. Strike it (`markilo ideas --brand <slug> --idea <id> --strike "<that reading>"`) when that
|
|
42
|
+
reading is a UI glyph or icon (a bracket, a return key, a gauge, a cross, a chevron, a loop), a cliché of the category,
|
|
43
|
+
the product's own object, the name's initial with a cut, or a meaning with no specific form. Keep the rest with the
|
|
44
|
+
reading you expect and rank them, 1 = most ownable (`--keep "<reading>" --rank n`). Keep at least three when you can,
|
|
45
|
+
from different sources; keep none rather than weak ones. Final answer ≤ 120 words: the kept ideas in rank order and
|
|
46
|
+
one line on what the struck ones had in common.
|
|
47
|
+
|
|
48
|
+
**Second look** (when the caller says `second-look <concept id>`): you are a fresh pair of eyes on ONE concept whose
|
|
49
|
+
first look landed on the edge of the gate. The caller tells you whether it is wordmark-led. Run no command except
|
|
50
|
+
`markilo brief show --brand <slug>` and the one that records your look — not `concept list`, `status` or `ideas`, which
|
|
51
|
+
print the designer's direction and other critics' verdicts. Read only the brief and the images —
|
|
52
|
+
`concepts/<id>/review/context-<id>.png` or `brand/brands/<slug>/research/cache/review/context-<id>.png`,
|
|
53
|
+
`concepts/<id>/review/symbol-sheet.png`, and for `lead: wordmark` the `wordmark-sheet.png` first. Do not open
|
|
54
|
+
`concept.json`, `decisions.md`, the reports, other concepts or anything the designer or another critic wrote: your
|
|
55
|
+
look counts only if it is independent. Then record, cold, in one call: `markilo concept update --brand <slug>
|
|
56
|
+
--concept <id> --look distinctiveness=n,memorability=n,brand-fit=n,craft=n,versatility=n --look-present
|
|
57
|
+
yes|no:"<why>" --reviewer <model id>`. Same calibration as below. Final answer ≤ 60 words: your first three readings
|
|
58
|
+
and the yes/no.
|
|
59
|
+
|
|
60
|
+
**Full review** — for each concept the caller names (or all non-rejected concepts in `markilo concept list --brand <slug>`).
|
|
61
|
+
The gate rests on step 1, scored cold: in Markilo's benchmark, scores given before reading the designer's rationale
|
|
62
|
+
predicted an independent judge far better than scores given after it.
|
|
63
|
+
1. **Blind first look.** Read the brief (`markilo brief show --brand <slug>`) and the images —
|
|
64
|
+
`brand/brands/<slug>/research/cache/review/context-<id>.png` (the mark in browser tabs, on a home screen among the
|
|
65
|
+
collected competitors, in a header and as an avatar; `markilo verify` writes it) and
|
|
66
|
+
`concepts/<id>/review/symbol-sheet.png` — but not `concept.json`, the reports or anything the designer wrote.
|
|
67
|
+
When `markilo concept list` shows the concept as `lead: wordmark`, the word is the identity: read
|
|
68
|
+
`concepts/<id>/review/wordmark-sheet.png` first and score the word and its icon together.
|
|
69
|
+
a. Write the first three things the mark looks like to a stranger and the most unfortunate thing this product's
|
|
70
|
+
audience could take it for (a gravestone for a sleep app, a quotation mark for a finance app, a back button):
|
|
71
|
+
`markilo concept update --brand <slug> --concept <id> --reads-as "<first>; <second>; <third>"`.
|
|
72
|
+
b. Score it cold, 0–10: `--blind distinctiveness=n,memorability=n,brand-fit=n,craft=n,versatility=n` (brand fit
|
|
73
|
+
against the brief). Calibration: 3 = clip art or a stock shape, 5 = competent but forgettable, 7 = strong and
|
|
74
|
+
ownable, 9 = category-defining.
|
|
75
|
+
c. Answer, still cold: would a senior identity designer put this in front of a client as is?
|
|
76
|
+
`--present yes:"<why>"` or `--present no:"<why>"`. Name the model you run on with `--reviewer <model id>` (e.g.
|
|
77
|
+
`claude-opus-5-5`); the gate reports it.
|
|
78
|
+
Then describe it from memory in at most eight words, without looking again.
|
|
79
|
+
2. Now read `concept.json` (idea and rationale), the quality and originality reports in `brand/brands/<slug>/reports/`
|
|
80
|
+
and `review/construction.png` when present. A cold yes may become a no only for a measured reason (a failing check,
|
|
81
|
+
an originality risk, an unreadable 16 px render); reading the rationale never turns a no into a yes.
|
|
82
|
+
3. Score each criterion 0–10 with a one-line reason, as feedback for the designer: brand-fit, semantic-relevance,
|
|
83
|
+
distinctiveness, memorability, simplicity, balance, craft, typography, color, cultural-fit, timelessness,
|
|
84
|
+
premium-perception, versatility. Hard caps that come from the blind look:
|
|
85
|
+
- the intended idea is not among your first readings → semantic-relevance ≤ 5;
|
|
86
|
+
- a first reading is a UI icon, a known logo or a cliché (paperclip, hamburger menu, play button, Tetris piece,
|
|
87
|
+
igloo, generic arrow or checkmark…) → distinctiveness ≤ 5, and name it;
|
|
88
|
+
- on the home screen it does not stand out from the competitors next to it, or it is not recognisable in the
|
|
89
|
+
16 px tab → distinctiveness ≤ 6;
|
|
90
|
+
- your eight-word description would fit another mark on the context sheet just as well → memorability ≤ 5;
|
|
91
|
+
- the first reading is the name's initial and the idea is a cut, slice, offset, step or nested copy of it →
|
|
92
|
+
distinctiveness ≤ 5 (the most common monogram device);
|
|
93
|
+
- an unfortunate misreading is plausible for this audience, or the form language contradicts the brief's
|
|
94
|
+
adjectives → brand-fit ≤ 5.
|
|
95
|
+
4. Record with exactly these criterion names: `markilo concept update --brand <slug> --concept <id> --judgment
|
|
96
|
+
brand-fit=7:"…" --judgment semantic-relevance=6:"…" --judgment …` (re-recording a criterion replaces it).
|
|
97
|
+
5. Be calibrated: 5 = competent but forgettable, 7 = strong and ownable, 9 = category-defining. Generic geometry
|
|
98
|
+
(two blobs, circle + bar, a stacked monogram in a stock font) scores ≤ 4 on distinctiveness however clean it is.
|
|
99
|
+
6. The output's `gate` (also in `markilo concept list`) applies the rule — blind brand-fit, distinctiveness and
|
|
100
|
+
memorability ≥ 6, and a yes — and its `next` says what follows (`fix` once, `reject`, or `second-look` when your
|
|
101
|
+
look landed on the edge of the bar: two fresh critics look too and the majority decides); report those, not your
|
|
102
|
+
own sum. For `fix`, name exactly what must change; a cold score under 6 means the idea did not land, and a rework of
|
|
103
|
+
the same idea almost never passes, so say which different move to try instead.
|
|
104
|
+
7. Name the single most important improvement for each concept, and flag anything that looks like an existing mark
|
|
105
|
+
or a cliché even if the automated similarity was low (conceptual similarity is not measured automatically).
|
|
106
|
+
|
|
107
|
+
Final answer: a ranked list with one paragraph per concept (including the blind readings), the yes/no answer, and your
|
|
108
|
+
recommendation. Mark
|
|
109
|
+
everything as judgment. Do not soften scores to be encouraging; the user only sees concepts that pass.
|