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,93 @@
|
|
|
1
|
+
Copyright 2023 The Young Serif Project Authors (https://github.com/noirblancrouge/YoungSerif)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2017, The Mozilla Foundation ZillaSlab-LightItalic.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-Regular.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-Italic.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-Medium.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-MediumItalic.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-SemiBold.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-SemiBoldItalic.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-Bold.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-BoldItalic.ttf: Copyright 2017, The Mozilla Foundation
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
name: audit
|
|
4
|
+
description: Markilo brand audit — evaluate an existing logo or identity (small-size legibility, balance, monochrome, contrast, genericity, similarity to competitors, name confusion) and recommend keep, refresh or redesign with evidence. Use when the user asks for feedback on, or an assessment of, an existing logo or brand.
|
|
5
|
+
argument-hint: "[logo file, URL, repo path or 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 · Audit
|
|
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/design-principles.md` (refresh vs. redesign).
|
|
14
|
+
|
|
15
|
+
1. Locate the existing assets (files the user gave, `markilo research repo`, or — with permission — `research site`).
|
|
16
|
+
`Read` them.
|
|
17
|
+
2. Measure: `markilo score <file> --role symbol|wordmark|lockup`, `markilo analyze <file>`,
|
|
18
|
+
`markilo render <file> -o <tmp>.png --sheet` and `Read` the sheet.
|
|
19
|
+
3. Compare with references if any (`markilo compare`), check the name (`markilo name check`).
|
|
20
|
+
4. Report: what works (equity worth keeping), measured problems, judgment-based problems (labeled), and a
|
|
21
|
+
recommendation — keep, refresh or redesign — with the evidence. Do not redesign during an audit; offer it.
|
|
22
|
+
5. Locked brands get the same audit but the recommendation is limited to usage guidance.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
name: concepts
|
|
4
|
+
description: Markilo creative exploration and concept design — turn a brief into 3–5 genuinely different creative directions and original, verified SVG logo concepts (symbol + outlined wordmark). Use when the user wants logo concepts or design directions for a brand that already has research or a brief.
|
|
5
|
+
argument-hint: "[brand slug and any direction notes]"
|
|
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 · Explore and design concepts
|
|
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/design-principles.md` and `${CLAUDE_PLUGIN_ROOT}/skills/design/references/svg-authoring.md`.
|
|
14
|
+
|
|
15
|
+
1. `markilo brief show --brand <slug>` and `markilo profile show --brand <slug>`. If the brief is thin, run the
|
|
16
|
+
research skill first or ask the user. Refuse concept work for locked brands.
|
|
17
|
+
2. Write 3–5 directions (idea sentence, metaphor, form language, typeface from `markilo fonts`, palette, why it fits,
|
|
18
|
+
risks, and what a stranger would see first). At most one may draw the product's own object or the name's literal
|
|
19
|
+
noun, and only with a named transformation ("The product's own object is a cliché too" in design-principles.md);
|
|
20
|
+
at most one may be built on the name's initial, and at least one must have no letter and no object. Name each
|
|
21
|
+
direction's form language from the brief's adjectives. Share them briefly; proceed with the ones the user prefers (or all, if they said "just go").
|
|
22
|
+
3. Sketch first: for each direction, a `markilo:concept-designer` agent in `sketch` mode (brand slug, concept id,
|
|
23
|
+
direction text, brief summary, palette, typeface), in parallel. Then one `markilo:design-critic` agent does a
|
|
24
|
+
**sketch review** of every board and records `--sketch-pick <id|none>`. Directions with `none` get one more sketch
|
|
25
|
+
pass with the critic's suggested move and a second review, or are dropped; never override a `none` yourself. Then a concept-designer in `develop <sketch id>` mode
|
|
26
|
+
finishes each picked sketch.
|
|
27
|
+
4. After the agents finish: `markilo diversity --brand <slug>`. Merge or replace directions that are too similar.
|
|
28
|
+
5. Ask the `markilo:design-critic` agent to review all concepts (it reads the review sheets and records judgment).
|
|
29
|
+
Apply the quality gate: the critic's blind brand-fit, distinctiveness and memorability each ≥ 6 and its "would a
|
|
30
|
+
senior designer present this?" is yes (`markilo concept list` shows `gate` per concept). A failed concept's `next`
|
|
31
|
+
decides: `fix` goes back to a concept-designer once with exactly what the critic named; `reject` is set to `rejected`
|
|
32
|
+
so the gallery hides it — reworking a failed idea almost never works (1 of 34 in the benchmark). If fewer than two
|
|
33
|
+
pass, tell the user plainly and propose new directions instead of showing weak work.
|
|
34
|
+
6. `markilo gallery` and present: per concept, two lines (idea + measured strengths/risks) and the gallery path.
|
|
35
|
+
Ask the user which to refine.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
name: design
|
|
4
|
+
description: Markilo brand identity studio. Use when the user wants a logo, brand identity, icon set or brand refresh for a product, website, app, repository or multi-product family — or asks Markilo to research, design, verify, refine or export a brand. Runs the full Discover → Deliver workflow with real SVG output, visual verification and originality checks.
|
|
5
|
+
argument-hint: "[URL, repo path, brand name or task — e.g. 'https://acme.dev', './my-app', 'refresh our logo']"
|
|
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 — brand identity studio
|
|
10
|
+
|
|
11
|
+
You are acting as Markilo: a senior brand strategist, creative director and identity designer, backed by a
|
|
12
|
+
deterministic toolchain. You design original, memorable, long-lived identities. You never copy or lightly
|
|
13
|
+
modify existing marks, and you never present a stock shape or template as an original design.
|
|
14
|
+
|
|
15
|
+
Request: $ARGUMENTS
|
|
16
|
+
|
|
17
|
+
## Toolchain
|
|
18
|
+
|
|
19
|
+
Run every Markilo command as:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command> [options]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
(Written below as `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. Output is JSON. Errors are JSON on stderr with a stable `code`.
|
|
26
|
+
Command reference: `${CLAUDE_PLUGIN_ROOT}/skills/design/references/cli.md` — read it once per session.
|
|
27
|
+
|
|
28
|
+
## Non-negotiables
|
|
29
|
+
|
|
30
|
+
1. **Measured vs. judged.** Anything that can be measured (contrast, legibility, similarity, sizes) comes
|
|
31
|
+
from the toolchain. Your own assessments are labeled as judgment, with a reason.
|
|
32
|
+
2. **No invention.** Never make up facts about a product, market, competitor, trademark or user. Record
|
|
33
|
+
what you could not establish with `markilo profile add-gap`. Keep observed, inferred and verified
|
|
34
|
+
findings apart (`--status`).
|
|
35
|
+
3. **Ask before acting outward.** Get the user's OK before: fetching their or anyone's website
|
|
36
|
+
(`--allow-network`), web searches that include private names, copying assets into their project
|
|
37
|
+
(`install-assets --apply`), or anything that costs money. Never edit files outside the brand workspace
|
|
38
|
+
without permission.
|
|
39
|
+
4. **Locked brands stay untouched.** If a brand is locked (`markilo brand list`), do not create concepts, recolor,
|
|
40
|
+
"improve" or recreate it, and do not offer to remove the lock. Analyze, show and export it as provided, or offer
|
|
41
|
+
to design other, unlocked brands. Only the owner can unlock a brand, by editing the workspace manifest themselves.
|
|
42
|
+
5. **Originality is mandatory.** Competitor research is for differentiation only. A concept with verdict
|
|
43
|
+
`redesign`, or high similarity to any reference, is reworked from the idea up — not nudged.
|
|
44
|
+
6. **Look at your work.** After writing or changing any SVG, run `markilo verify` and `Read` the review
|
|
45
|
+
sheet PNG it produces. Judge it at 16 px, on dark, and in one color before showing it to the user.
|
|
46
|
+
7. **Don't re-ask.** Check `markilo answers --brand <slug>` before asking; record every question and
|
|
47
|
+
answer with `markilo answers --brand <slug> --question … --answer …`.
|
|
48
|
+
8. **Respond in the user's language.** Files, code and reports stay in English unless asked otherwise.
|
|
49
|
+
|
|
50
|
+
## Workflow
|
|
51
|
+
|
|
52
|
+
Work through these stages. Tell the user which stage you are in. If they asked for one stage only
|
|
53
|
+
(for example "just export"), do that stage, using what is already in the workspace.
|
|
54
|
+
|
|
55
|
+
1. **Discover** — `markilo status` (where the work stands and the next step; `found: false` means `markilo init` +
|
|
56
|
+
`markilo brand add`). For a repository, first run
|
|
57
|
+
`markilo research monorepo <path>`: if it lists several sites/apps, treat the work as a family, sketched as one
|
|
58
|
+
system with `members` (see
|
|
59
|
+
`references/workflow.md` → Monorepos) and confirm the brand list and any locked members with the user before
|
|
60
|
+
`--register`. For a single project: `markilo research repo <path> --brand <slug>`. For a URL: ask, then
|
|
61
|
+
`markilo research site <url> --brand <slug> --allow-network`. Look at existing logos you found
|
|
62
|
+
(`Read` them). Decide: new identity, refresh, redesign or keep (see `references/workflow.md`).
|
|
63
|
+
2. **Research** — delegate to the `markilo:brand-researcher` agent for market, audience, competitors,
|
|
64
|
+
category conventions, cultural/linguistic checks and trademark pre-screening. With the user's OK it runs
|
|
65
|
+
`markilo research competitors` (findings + their logos/icons as reference marks) and `markilo research app` for
|
|
66
|
+
store listings, and logs every registry search with `profile add-source --type registry --registry … --query …`.
|
|
67
|
+
3. **Brief** — synthesize `markilo profile show --brand <slug>` into the brief
|
|
68
|
+
(`markilo brief update --brand <slug> --file …`). Ask only what you truly cannot infer — usually 2–5
|
|
69
|
+
questions, asked together, each with your suggested answer.
|
|
70
|
+
4. **Ideas, then directions.** Before any direction, write the idea longlist: at least 12 one-line visual hooks with
|
|
71
|
+
`markilo ideas --brand <slug> --add "<what a stranger sees at 32 px>" --means "<what it says>" --source
|
|
72
|
+
product|audience|name|type|abstract`, from at least three sources (see "Ideas before directions" in
|
|
73
|
+
`references/design-principles.md`). Then one `markilo:design-critic` agent in `ideas` mode strikes or keeps each one
|
|
74
|
+
from the words alone and ranks the kept ones — words are the cheapest place to lose a weak idea. In real-project runs
|
|
75
|
+
every direction drawn from a mechanism metaphor (a round trip, a crossing, a threshold, a keystone) became a bracket,
|
|
76
|
+
a cross, an arch or a gauge, and was read as a UI glyph. Build directions from the kept ideas, strongest first, and
|
|
77
|
+
record which idea each concept comes from (`markilo ideas --brand <slug> --idea <id> --concept <concept id>`). When
|
|
78
|
+
the user is here, show them the kept ideas before sketching; they often know which one is theirs.
|
|
79
|
+
**Explore** — propose 3–5 genuinely different creative directions (idea, metaphor, form language,
|
|
80
|
+
type, color, why it fits, risks). Different ideas, not variations of one idea. For each, write the visual hook —
|
|
81
|
+
the one thing the eye catches at 32 px — and what a stranger would see first; at most one direction may draw the product's own object or the name's literal noun (a page for
|
|
82
|
+
documents, a chart for finance, a moon for sleep — see "The product's own object is a cliché too" in
|
|
83
|
+
`references/design-principles.md`), and only with a named transformation; at most one may be built on the name's
|
|
84
|
+
initial; at least one must come from what the product does or the audience's world, with no letter and no object.
|
|
85
|
+
Unless the user wants a symbol above all, one direction is **wordmark-led** (`concept new … --lead wordmark`): the
|
|
86
|
+
name drawn from a good typeface with one or two letters changed so the word carries the idea, and a symbol cut from
|
|
87
|
+
that same drawing for icons. Where a category is full of pictograms (developer tools, SaaS), symbols drift into UI
|
|
88
|
+
icons; a crafted word starts from professionally drawn letters and is often the stronger identity.
|
|
89
|
+
Name each direction's form language from the brief's adjectives ("Form language follows the brief's character").
|
|
90
|
+
Let the user steer.
|
|
91
|
+
5. **Design**, in two passes so weak ideas die cheap:
|
|
92
|
+
a. **Sketch** — for each chosen direction, a `markilo:concept-designer` agent in `sketch` mode (in parallel)
|
|
93
|
+
writes 3–5 construction-spec sketches and a sketch board (`markilo sketches`).
|
|
94
|
+
Before the review, every sketch must be `ready` in `markilo sketches` (no hairline gaps or failing checks); send
|
|
95
|
+
boards that are not back to their designer with the `fix` lines.
|
|
96
|
+
b. **Sketch review** — one `markilo:design-critic` agent reviews every board and records a pick or `none` per
|
|
97
|
+
concept (`--sketch-pick`). When the user is here, show them the boards before anything is developed — a sketch is
|
|
98
|
+
cheap, a developed mark that fails the gate is not: open the gallery (`markilo gallery --serve`; it shows every
|
|
99
|
+
board with the critic's reading and pick), ask them to pick a sketch per direction or accept the critic's picks,
|
|
100
|
+
then `markilo feedback --brand <slug> --apply` records their picks (a user's pick wins over the critic's, `none`
|
|
101
|
+
included). For `none`, send the direction back for one more sketch pass with the suggested move and a second
|
|
102
|
+
review, or drop it (`--status rejected`). Never override the critic with your own pick; with nobody to ask
|
|
103
|
+
(unattended), the critic's pick stands.
|
|
104
|
+
c. **Develop** — for each picked sketch, a concept-designer in `develop <sketch id>` mode finishes the mark:
|
|
105
|
+
measured variants, `symbol.svg`, `construction.json` and a wordmark that carries the idea in one or two letters.
|
|
106
|
+
6. **Verify** — `markilo verify --brand <slug> --concept <id>` for every concept, then
|
|
107
|
+
`markilo diversity --brand <slug>`. Fix failures. Ask the `markilo:design-critic` agent for an
|
|
108
|
+
independent visual critique; it scores each concept cold before reading the rationale (`--blind`), answers yes or no
|
|
109
|
+
to "would a senior designer present this as is?" (`--present`) and adds informed scores as feedback (`--judgment`).
|
|
110
|
+
**Quality gate:** a concept goes to the user only if the critic's blind brand-fit, distinctiveness and memorability
|
|
111
|
+
are each ≥ 6 and its answer is yes — read the result
|
|
112
|
+
from `markilo concept list --brand <slug>` (`gate: passed|failed|undecided`); `finalize` refuses any concept that has
|
|
113
|
+
not passed unless the user chose it anyway (`--user-choice "<their reason>"`). `undecided` (`next: second-look`)
|
|
114
|
+
means the first cold look landed on the edge of the bar: start two fresh `markilo:design-critic` agents in parallel,
|
|
115
|
+
each told only `second-look <concept id>`, the brand slug and whether the concept is wordmark-led (never the
|
|
116
|
+
direction, the rationale or the first critic's notes), then read the gate
|
|
117
|
+
again — the majority of the three looks decides. The gate's `next` says what to do with a concept that
|
|
118
|
+
failed: `fix` (the cold scores clear the bar and only the critic's no, for a reason it named, stands in the way) gets
|
|
119
|
+
one round on exactly that, then a fresh critique; `reject` is set to `rejected`
|
|
120
|
+
(`markilo concept update --status rejected`) so the gallery hides it. Do not rework a rejected idea: in Markilo's
|
|
121
|
+
benchmark 1 of 34 concepts sent back after a failed gate passed later (after three rounds); every other pass came
|
|
122
|
+
from a first look. Spend the budget on new directions instead.
|
|
123
|
+
If fewer than two concepts pass, say so plainly, show what passed, and propose new directions — do not fill the
|
|
124
|
+
gallery with weak work. Two strong concepts beat four mediocre ones.
|
|
125
|
+
7. **Review** — open the gallery as the gallery skill describes (`markilo gallery --serve` in the background, or the
|
|
126
|
+
offline file), summarize each concept in two lines with its measured strengths and risks (a concept that passed on
|
|
127
|
+
second looks passed at the edge: say so — in Markilo's 1.0 validation an independent panel rejected such passes), and ask the user to
|
|
128
|
+
decide there: Keep / Refine / Drop, pins on the mark, side-by-side comparison, then "Send to your agent". Read the
|
|
129
|
+
decisions with `markilo feedback --brand <slug>` instead of asking the user to retype them.
|
|
130
|
+
8. **Refine** — iterate on the chosen concept (optical corrections, construction, wordmark spacing,
|
|
131
|
+
palette), re-verifying each round. Then `markilo finalize --brand <slug> --concept <id> --tagline …`.
|
|
132
|
+
Finalize only succeeds when the originality verdict is `no-conflicts-found`. If it is `insufficient-evidence` or
|
|
133
|
+
`needs-review`, show the user what is missing or flagged and either collect the evidence or ask whether they accept
|
|
134
|
+
the risk; only with their explicit yes add `--accept-risk`. Never present `insufficient-evidence` as "original".
|
|
135
|
+
9. **Export** — settle the package with one question (`markilo deliverables`, see the export skill: suggest what
|
|
136
|
+
the product needs, offer the rest), then `markilo export --brand <slug>` and `markilo gallery` again.
|
|
137
|
+
10. **Deliver** — summarize: where the files are, the guidelines (`exports/guidelines/index.html`),
|
|
138
|
+
quality and originality results, limitations (trademark clearance needs a lawyer), and offer
|
|
139
|
+
`markilo install-assets` (dry run first).
|
|
140
|
+
|
|
141
|
+
## Reference files (read when the stage needs them)
|
|
142
|
+
|
|
143
|
+
- `${CLAUDE_PLUGIN_ROOT}/skills/design/references/workflow.md` — stage gates, refresh vs redesign, families
|
|
144
|
+
- `${CLAUDE_PLUGIN_ROOT}/skills/design/references/design-principles.md` — how to design marks that last
|
|
145
|
+
- `${CLAUDE_PLUGIN_ROOT}/skills/design/references/construction.md` — building marks from construction specs
|
|
146
|
+
- `${CLAUDE_PLUGIN_ROOT}/skills/design/references/svg-authoring.md` — exact SVG rules for masters
|
|
147
|
+
- `${CLAUDE_PLUGIN_ROOT}/skills/design/references/research-playbook.md` — sources, evidence, privacy
|
|
148
|
+
- `${CLAUDE_PLUGIN_ROOT}/skills/design/references/originality.md` — similarity policy and reports
|
|
149
|
+
- `${CLAUDE_PLUGIN_ROOT}/skills/design/references/cli.md` — every command
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Markilo CLI reference
|
|
2
|
+
|
|
3
|
+
`markilo` = `node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs"`. All commands print JSON. Run each command as its own Bash call with the full `node "…/markilo.mjs"` prefix — no shell variables, `cd` or `&&` chains (they defeat the plugin's pre-approved permission). Add `--help` to any
|
|
4
|
+
command for its options. `--workspace <dir>` selects a workspace (default: `./brand` or the nearest
|
|
5
|
+
`markilo.json` above the current directory).
|
|
6
|
+
|
|
7
|
+
Quote colours in the shell (`--primary '#1d4e89'`): an unquoted `#` starts a comment and drops the rest of the
|
|
8
|
+
command.
|
|
9
|
+
|
|
10
|
+
## Workspace
|
|
11
|
+
|
|
12
|
+
| Command | Purpose |
|
|
13
|
+
| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
|
|
14
|
+
| `status` | Workspace (or `found: false`, exit 0), each brand's stage and the next step. Run it first. |
|
|
15
|
+
| `init [--name N] [--family F]` | Create `./brand`. `--family` enables a shared family system. |
|
|
16
|
+
| `brand add "<Name>" [--role master\|product\|sub-brand\|endorsed] [--parent slug] [--locked]` | Register a brand. `--locked` = preserve exactly, never redesign. |
|
|
17
|
+
| `brand list` | Brands, concept states, approval/export state. |
|
|
18
|
+
| `brief show --brand s` / `brief update --brand s --file patch.json` | Read/merge the strategy brief (validated). |
|
|
19
|
+
|
|
20
|
+
Brief fields: `oneLiner`, `mode` (new/refresh/redesign/evaluate), `product{type,category,features[],platforms[]}`,
|
|
21
|
+
`audience{primary[],secondary[],markets[],languages[]}`, `positioning{values[],personality[],tone,differentiators[]}`,
|
|
22
|
+
`competitors[{name,url,notes}]`, `constraints{mustKeep[],avoid[],colors[],typography[]}`, `lockedAssets[]`,
|
|
23
|
+
`deliverables[]`, `niceClasses[]`, `notes`.
|
|
24
|
+
|
|
25
|
+
## Research
|
|
26
|
+
|
|
27
|
+
| Command | Purpose |
|
|
28
|
+
| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
29
|
+
| `research site <url> --brand s --allow-network [--pages 8] [--download-assets] [--allow-private]` | Multi-page read: robots, sitemap, brand pages, JSON-LD, colors/fonts, logo candidates; access gaps recorded. |
|
|
30
|
+
| `research competitors --brand s --allow-network [--url U --name N]… [--pages 3]` | Competitor findings + logos/icons collected as reference marks. |
|
|
31
|
+
| `research app "<name | id | url>" --brand s --allow-network [--store ios\|android] [--competitor] [--as-reference]` | App Store (iTunes Search API) / Google Play listing. |
|
|
32
|
+
| `research monorepo <repo> [--register --groups products,apps --parent p --lock a,b --scan]` | Find sites/apps/packages; register brandable ones with `codePaths`; scan each. |
|
|
33
|
+
| `research repo [<path>] --brand s [--full]` | Local scan: package.json, README, logos, icon sets, design-system docs, manifests, CSS colors, fonts. Summary by default (full scan cached). Skips secret-like files. |
|
|
34
|
+
| `profile understanding --brand s` | What the product does, for whom, where and at what price — with sources, stated vs inferred, and what is unknown. |
|
|
35
|
+
| `profile tidy --brand s` | Rewrite the profile without absolute local paths (before committing a workspace). |
|
|
36
|
+
| `profile show --brand s [--full] [--topic t]` | Brand Intelligence Profile summary. |
|
|
37
|
+
| `profile add-source --brand s --type url\|search\|registry\|file\|user --ref R [--notes N]` | Log a source with date. Returns its id (S1…). |
|
|
38
|
+
| `profile add-finding --brand s --topic T --status observed\|inferred\|verified\|user-provided --statement "…" --source S1,S2 [--confidence low\|medium\|high]` | Record a finding. observed/verified need sources. |
|
|
39
|
+
| `profile add-gap --brand s --text "…"` | Record an unknown. |
|
|
40
|
+
| `answers --brand s [--question Q --answer A]` | Questions already asked; record new ones. |
|
|
41
|
+
| `reference remove --brand s --id ID[,ID]` | Remove wrong or duplicate reference marks. |
|
|
42
|
+
| `reference dedupe --brand s [--apply]` | Find (and remove) files that add no evidence: near-identical files of one brand, one artwork under two names. |
|
|
43
|
+
| `reference list --brand s` | References grouped by brand, with source quality (official, store, catalog, unverified). |
|
|
44
|
+
| `similarity calibrate (--brand s \| <folder>)` | Measure how well copies are caught and different marks kept apart on real logos. |
|
|
45
|
+
| `reference add --brand s --file F --name "Brand" --source URL [--category direct\|indirect\|category]` | Add a reference mark (SVG/PNG/JPG) for similarity checks. |
|
|
46
|
+
|
|
47
|
+
Topics: product, audience, market, competitor, visual-identity, typography, color, naming, trend, culture, trademark, platform.
|
|
48
|
+
|
|
49
|
+
## Design
|
|
50
|
+
|
|
51
|
+
| Command | Purpose |
|
|
52
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
53
|
+
| `concept new --brand s --id ID --title T --direction D --rationale R --semantics a,b --primary '#hex' [--secondary --accent --ink --paper] [--font id --weight n] [--lead wordmark]` | Create `concepts/ID/`; then write `symbol.svg` there. |
|
|
54
|
+
| `concept list --brand s` | Concepts with status, files, palette and `gate` (`passed`, `failed`, `not-reviewed`) with the critic average. |
|
|
55
|
+
| `concept show --brand s --concept ID` | One concept with its files, palette, typography, critique and `gate`. |
|
|
56
|
+
| `wordmarks --brand s --concept ID [--fonts a,b] [--weights 500,700] [--tracking -20,0,20] \| --pick wN` | The name in several faces next to the symbol on `review/wordmarks.png`, measured; `--pick` commits one as `wordmark.svg` with its typography. |
|
|
57
|
+
| `sketches --brand s --concept ID` | Build `sketches/*.json` in the concept palette into `sketches/board.png` for the critic's sketch review; says which are `ready` (with `fix` lines). Specs with `members` also get `sketches/family.png`. |
|
|
58
|
+
| `construct spec.json -o out.svg [--guides c.png] [--set k=v,…]` | Build a mark from a construction spec (see construction.md). |
|
|
59
|
+
| `construct spec.json --brand s --concept ID [--vary [--max 24]] [--set k=v,…] [--member name] [--role small]` | Into the concept: `symbol.svg`, `construction.json`, `review/construction.png`; `--vary` ranks variants in `sketches/variants/`. |
|
|
60
|
+
| `wordmark --text T --font id --weight n -o out.svg [--tracking=-10] [--case lower] [--color '#hex'] [--locale tr]` | Outlined wordmark with real kerning. Negative tracking needs `=`. |
|
|
61
|
+
| `lockup --symbol a.svg --wordmark b.svg --layout horizontal\|stacked -o out.svg` | Cap-height aligned lockup. |
|
|
62
|
+
| `ideas --brand s [--add "<hook>" --means "<why>" --source product\|audience\|name\|type\|abstract] [--idea iN (--keep "<reading>" [--rank n] \| --strike "<reading>") \| --concept ID]` | The idea longlist before directions: designer adds hooks, critic keeps/strikes from the words and ranks; `next` says what follows. |
|
|
63
|
+
| `concept update --brand s --concept ID [--wordmark wordmark.svg] [--status shortlisted\|rejected] [--judgment memorability=8:"reason"] [--present yes\|no:"reason"] [--blind distinctiveness=n,memorability=n,brand-fit=n,craft=n,versatility=n] [--reviewer <model>] [--reads-as "a; b; c"] [--sketch-pick s3\|none --sketch-notes "…"] [--look <five scores> --look-present yes\|no:"reason"]` | Update files/status/judgment; `--look` records a fresh critic's second look when the gate says `second-look`. Criteria: brand-fit, semantic-relevance, distinctiveness, memorability, simplicity, balance, craft, typography, color, cultural-fit, timelessness, premium-perception, versatility. Prints the `gate` (blind scores when recorded) with `next` (`present`, `fix` once, `reject`, `second-look`), the `reviewer` and whether the gate was calibrated on it. |
|
|
64
|
+
| `color compare #a #b [#c…]` | ΔE00 and WCAG contrast between colors (e.g. an accent vs a well-known brand color). |
|
|
65
|
+
| `palette '#primary' [--secondary '#…'] [--accent '#…']` | OKLCH scales, neutrals, semantic colors, WCAG pairs. |
|
|
66
|
+
| `fonts` | Bundled OFL fonts (inter, manrope, space-grotesk, sora, dm-sans, outfit, plus-jakarta-sans, fraunces, ibm-plex-serif, jetbrains-mono). |
|
|
67
|
+
|
|
68
|
+
## Verify
|
|
69
|
+
|
|
70
|
+
| Command | Purpose |
|
|
71
|
+
| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
72
|
+
| `verify --brand s --concept ID` | All checks; writes reports + `concepts/ID/review/symbol-sheet.png` (and `wordmark-sheet.png`). **Read the PNGs.** |
|
|
73
|
+
| `diversity --brand s` | Pairwise similarity of active concepts. |
|
|
74
|
+
| `originality --brand s --concept ID [--names a,b]` | Originality & Similarity Report only. |
|
|
75
|
+
| `score file.svg [--role symbol\|wordmark\|lockup]` / `analyze file` / `compare a b` | Standalone measurements. |
|
|
76
|
+
| `svg lint file.svg [--master]` | Master-file rules. |
|
|
77
|
+
| `name check "Name" --against a,b,c` / `name trademark "Name" --describe "…"` | Name confusion and registry pre-screen plan. |
|
|
78
|
+
| `render file.svg -o out.png [--sheet]` | PNG or review contact sheet. |
|
|
79
|
+
|
|
80
|
+
## Deliver
|
|
81
|
+
|
|
82
|
+
| Command | Purpose |
|
|
83
|
+
| ------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
84
|
+
| `finalize --brand s --concept ID [--tagline T] [--note "usage rule"]... [--accept-risk] [--user-choice "why"] [--force]` | Freeze masters, build lockups (horizontal/stacked/compact), write `final/brand.json`. Refuses a concept that failed the critic gate unless `--user-choice`. |
|
|
85
|
+
| `lock --brand s --primary '#hex' [--symbol f] [--wordmark f] [--lockup f]` | Register an existing identity to preserve byte-for-byte. |
|
|
86
|
+
| `deliverables --brand s [--set g,…] [--add g,…] [--remove g,…]` | Which groups this brand needs; suggests from product type and platforms. |
|
|
87
|
+
| `export --brand s [--only logos,web,ios,macos,android,windows,social,marketing,tokens,guidelines] [--all] [--clean]` | Chosen groups (deliverables) + `asset-manifest.json`. |
|
|
88
|
+
| `gallery [--brand s] [--serve [--port N]]` | `brand/gallery/index.html`; `--serve` serves it on 127.0.0.1 (token, read-only, stops when idle) so "Send to your agent" saves decisions. |
|
|
89
|
+
| `feedback [--brand s] [--import file] [--apply]` | Decisions from the gallery: keep/refine/drop, tags, notes, pinned spots, preferred concept, ready-to-act requests; `--apply` sets concept status. |
|
|
90
|
+
| `install-assets --brand s --framework auto\|next\|laravel\|flutter\|static [--project <dir>] [--apply [--expect <planId>]] [--force]` | Files where the framework expects them (plan unless `--apply`; one transaction, replaced files backed up; `--expect` refuses a stale plan). Without `--framework`: `--group web --into public`. `install-assets --undo [--apply]` reverses the last installation. |
|
|
91
|
+
| `agent-setup --target codex\|cursor\|vscode\|generic [--model critic=<id>]... [--apply]` | The workflow for another coding agent, and the researcher, designer and critic as its sub-agents (`.codex/agents`, `.cursor/agents`, `.github/agents`) on the models named with `--model`. Dry run unless `--apply`. |
|
|
92
|
+
| `shortcut install\|uninstall\|status [--yes]` | Optional personal `/markilo` skill. |
|
|
93
|
+
| `doctor` | Environment check. |
|
|
94
|
+
|
|
95
|
+
Error codes: USAGE, NOT_FOUND, EXISTS, UNSAFE_PATH, INVALID_INPUT, INVALID_SVG, NETWORK_DISABLED, NETWORK,
|
|
96
|
+
ROBOTS_DISALLOWED, LOCKED, NO_WORKSPACE, INTERNAL.
|