@kolbo/kolbo-code-linux-arm64-musl 2.2.5 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/bin/kolbo +0 -0
  2. package/package.json +1 -1
  3. package/skills/kolbo/SKILL.md +177 -1651
  4. package/skills/kolbo/VERSION +1 -0
  5. package/skills/kolbo/references/models/creative-director.md +106 -0
  6. package/skills/kolbo/references/models/gpt-image.md +111 -0
  7. package/skills/kolbo/references/models/html-presentation.md +139 -0
  8. package/skills/kolbo/references/models/landing-page.md +135 -0
  9. package/skills/kolbo/references/models/music.md +120 -0
  10. package/skills/kolbo/references/models/nano-banana.md +97 -0
  11. package/skills/kolbo/references/models/prompt-copilot.md +133 -0
  12. package/skills/kolbo/references/models/seedance.md +90 -0
  13. package/skills/kolbo/references/models/veo.md +110 -0
  14. package/skills/kolbo/references/models/visual-code.md +80 -0
  15. package/skills/kolbo/references/workflows/app-builder.md +41 -0
  16. package/skills/kolbo/references/workflows/cost-and-validation.md +138 -0
  17. package/skills/kolbo/references/workflows/dtc-ads.md +126 -0
  18. package/skills/kolbo/references/workflows/marketing-studio.md +157 -0
  19. package/skills/kolbo/references/workflows/marketplace-cards.md +146 -0
  20. package/skills/kolbo/references/workflows/media-library.md +76 -0
  21. package/skills/kolbo/references/workflows/product-photoshoot.md +199 -0
  22. package/skills/kolbo/references/workflows/production-log.md +155 -0
  23. package/skills/kolbo/references/workflows/research-first.md +174 -0
  24. package/skills/kolbo/references/workflows/transcription.md +163 -0
  25. package/skills/kolbo/references/workflows/troubleshooting.md +73 -0
  26. package/skills/kolbo/references/workflows/visual-dna.md +233 -0
@@ -0,0 +1,76 @@
1
+ # Media Library
2
+
3
+ Load this file when the user wants to browse, list, organize, delete, restore, move, favorite, share, or otherwise manage their media library — or when you produce a media file locally and need to surface it back to the user.
4
+
5
+ The library covers both **uploaded files** and **AI-generated outputs the user has saved**. Tools fall into five groups: ingest, browse, lifecycle (delete/restore/move), folders, and favorites.
6
+
7
+ ## ⚠️ Present locally-produced media to the user
8
+
9
+ When you produce a media file LOCALLY — `ffmpeg` via the `video-production` skill, Remotion render, manual `Bash` mux of audio + video, `edit_image` outputs saved to disk, any save-to-file flow — make sure the user can actually find and open it. Local files are invisible in the chat / canvas UI by default; only the path string makes it through.
10
+
11
+ **Rules:**
12
+
13
+ 1. **Surface the file in chat as a clickable thing**, not just a path string. Write the line as a markdown link to a `file://` URL so the user can click to open it in their default app:
14
+ ```
15
+ ✅ Final video ready: [zohar_hagai_campaign.mp4](file:///Users/mymac/Documents/test agent 1/zohar_hagai_campaign.mp4) (45s · 1440×1440 · with music)
16
+ ```
17
+ The user clicks the link → the desktop app shell hands the path to the system → opens in QuickTime / VLC / Finder reveal, etc.
18
+
19
+ 2. **Always log the local path in `.kolbo/production.md`** under the artifact's entry — that's the durable record:
20
+ ```md
21
+ ## Final
22
+ - **Campaign video (45s)**
23
+ - local: /Users/mymac/Documents/test agent 1/zohar_hagai_campaign.mp4
24
+ - resolution: 1440×1440
25
+ - audio: Gilded Horizon (Track 1 & 2, 3:03)
26
+ - rendered: 2026-05-16
27
+ ```
28
+
29
+ 3. **Don't auto-upload to `upload_media`**. The user wants local-only files to stay local; they have the file on disk and can move/share it themselves. Upload only when the user explicitly asks ("upload this", "share publicly", "give me a CDN URL").
30
+
31
+ 4. **Reveal-in-Finder affordance for macOS** when finishing a multi-step production: in addition to the `file://` link, mention the parent directory path so the user can `cd` or open the folder. Many users want to see all the intermediate files (frames, alt cuts, original audio) in one place.
32
+
33
+ 5. **Files served via `file://` won't render inline** in the chat as `<video>` / `<img>` — the desktop WebView blocks file:// for security. Don't try to embed; just link.
34
+
35
+ ## Routing — user says → call
36
+
37
+ | User says | Call |
38
+ |---|---|
39
+ | "Upload this file" / "host this" / "give me a public URL for this" | `upload_media` |
40
+ | "Show my media" / "list my images/videos" / "what do I have?" | `list_media` (pass `type` / `category` / `project_id` / `folder_id` / `search`) |
41
+ | "Show my favorites" / "list starred items" | `list_media` with `category=favorites` |
42
+ | "List everything in project X" | `list_media` with `project_id=X` |
43
+ | "List all videos in folder X" | `list_media` with `folder_id=X, type=video` |
44
+ | "What was the prompt for [item]?" / "tell me about this generation" | `get_media` |
45
+ | "How many videos do I have?" / "what's my storage usage?" | `get_media_stats` |
46
+ | "Favorite this" / "star this" / "save to favorites" | `favorite_media` |
47
+ | "Unfavorite" / "remove from favorites" / "unstar" | `unfavorite_media` |
48
+ | "Delete this" / "remove this image" | `delete_media` (soft, recoverable for 30 days) |
49
+ | "Restore it" / "undelete" / "bring it back from trash" | `restore_media` |
50
+ | "Permanently delete" / "wipe it forever" / "free up space" | **confirm with user** → `permanently_delete_media` |
51
+ | "Move this to project X" | `move_media` |
52
+ | "Clean up old [type]" / "delete everything from [time period]" | `list_media` (find ids) → **confirm** → `bulk_delete_media` |
53
+ | "Restore all from trash" | `list_media include_deleted=true` → `bulk_restore_media` |
54
+ | "Empty my trash" / "purge deleted items" | `list_media include_deleted=true` → **show count, confirm** → `bulk_permanently_delete_media` |
55
+ | "Move all these to project X" | `bulk_move_media` |
56
+ | "Move everything in folder X to project Y" | `move_folder_contents` |
57
+ | "Make a folder for X" / "create a 'campaigns' folder" | `create_media_folder` |
58
+ | "Rename folder" / "change folder color or icon" | `update_media_folder` |
59
+ | "Delete the [name] folder" | **confirm with user** → `delete_media_folder` (items stay in library) |
60
+ | "Add these to [folder]" / "put these in folder X" | `add_media_to_folder` |
61
+ | "Remove these from [folder]" | `remove_media_from_folder` |
62
+ | "Share [folder] with alice@…" | `share_media_folder` with `user_emails: [...]` |
63
+ | "Revoke [user]'s access to [folder]" | `unshare_media_folder` with `user_id` |
64
+ | "Show my folders" / "what folders do I have?" | `list_media_folders` |
65
+
66
+ ## Rules and gotchas
67
+
68
+ 1. **"Delete" is soft by default.** Use `delete_media` / `bulk_delete_media` for normal "delete" intent — items go to trash for 30 days and are recoverable. Only use `permanently_delete_media` / `bulk_permanently_delete_media` when the user explicitly asks for unrecoverable deletion ("permanently", "forever", "wipe", "free up space"). **Always confirm before either permanent variant.**
69
+ 2. **Confirm before destructive folder ops.** `delete_media_folder` detaches items (they stay in the library) but the folder itself is gone — no undo. Confirm with the user.
70
+ 3. **`bulk_move_media` is atomic.** If you get a "not all items owned by you" error, do NOT retry partially. Surface the error to the user and let them pick a smaller batch.
71
+ 4. **Prefer `list_media` filters over post-filtering.** Pass `project_id` / `folder_id` / `category` / `type` / `search` to the backend; don't fetch the whole library and filter client-side.
72
+ 5. **`is_favorited` is per-user.** On shared projects, an item can be favorited by you and not by your teammates — the value reflects the calling user only.
73
+ 6. **"Empty trash" flow:** `list_media` with `include_deleted=true` → show the count → confirm → `bulk_permanently_delete_media`. Never call the bulk-permanent endpoint without listing first so the user knows the scope.
74
+ 7. **Bulk caps:** 1000 ids for `bulk_delete_media` / `bulk_restore_media` / `bulk_permanently_delete_media` / `bulk_move_media`; 500 ids for `add_media_to_folder` / `remove_media_from_folder`. Split larger jobs into successive calls.
75
+ 8. **Folder share resolution:** `share_media_folder` takes emails; users not found come back in `not_found`. Report those to the user — don't assume the share succeeded silently. Members can list/add/remove items but cannot delete the folder or reshare it.
76
+ 9. **`get_media` accepts a generation_id as a fallback** for the `media_id` arg, so you can chase down items the user references by their original generation rather than by library id.
@@ -0,0 +1,199 @@
1
+ # Product Photoshoot — Brand Product Imagery
2
+
3
+ Load this file when the user wants **brand-quality product images** — studio shots, lifestyle scenes, Pinterest pins, hero banners, social carousels, ad packs, virtual try-ons, conceptual / CGI product shots, or seasonal restyles.
4
+
5
+ For ad **video** see `workflows/marketing-studio.md`. For composed brand ads (brand kit + ad format + avatar) see `workflows/dtc-ads.md`. For marketplace listings (Amazon main + secondary + A+ content) see `workflows/marketplace-cards.md`.
6
+
7
+ ## The 10 Modes
8
+
9
+ Pick by intent, not surface keyword. When two modes could apply, prefer the more specific one.
10
+
11
+ | Mode | When user wants… |
12
+ |---|---|
13
+ | `product_shot` | Product on neutral / studio / catalog background (Shopify, white-bg) |
14
+ | `lifestyle_scene` | Product in a real environment — hands, action, atmosphere (kitchen, gym, outdoor) |
15
+ | `closeup_product_with_person` | Tight crop with hands or partial face — beauty application, demonstrating, holding |
16
+ | `moodboard_pin` | Vertical 2:3 Pinterest-native pin, moodboard feel |
17
+ | `hero_banner` | Wide-format website / email / campaign header |
18
+ | `social_carousel` | 3–10 connected slides for IG / LinkedIn / Facebook |
19
+ | `ad_creative_pack` | Coordinated pack of static ad variants for Meta / TikTok / Pinterest / Google Ads |
20
+ | `virtual_model_tryout` | Product worn or used by an AI-rendered model (fashion, accessories) |
21
+ | `conceptual_product` | Surreal / CGI / levitating / splash / sculptural product |
22
+ | `restyle` | Transform an EXISTING image's aesthetic, mood, or seasonal context (without changing the subject) |
23
+
24
+ ### Picking the Mode
25
+
26
+ | User phrasing | Mode |
27
+ |---|---|
28
+ | neutral / clean / white / studio / catalog / Shopify | `product_shot` |
29
+ | scene / in use / kitchen / outdoor / cafe / gym | `lifestyle_scene` |
30
+ | hands holding / face with product / beauty application / demonstrating | `closeup_product_with_person` |
31
+ | Pinterest / pin / vertical pin | `moodboard_pin` |
32
+ | hero / banner / website header / landing page / email header / wide format | `hero_banner` |
33
+ | carousel / slide post / multi-slide / swipeable | `social_carousel` |
34
+ | ads / ad pack / paid social / Meta / TikTok / Pinterest ads / Google ads | `ad_creative_pack` |
35
+ | model wearing / virtual try-on / on body / fashion shoot / lookbook | `virtual_model_tryout` |
36
+ | levitating / floating / splash / frozen motion / surreal / CGI / sculptural | `conceptual_product` |
37
+ | modify EXISTING image's aesthetic / mood / season — without changing subject | `restyle` |
38
+
39
+ **Tie-breakers:**
40
+ - "Pinterest pin of my product on a kitchen counter" → `moodboard_pin` (Pinterest is the platform)
41
+ - "Hero banner showing my product in use" → `hero_banner` (banner format wins)
42
+ - "Carousel of my product in different scenes" → `social_carousel` (multi-slide wins)
43
+ - "Closeup of person applying my serum" → `closeup_product_with_person` (specific genre wins)
44
+
45
+ ## Mode → Kolbo MCP Routing
46
+
47
+ The mode determines which Kolbo MCP tool to call and what defaults to use.
48
+
49
+ | Mode | Primary tool | Model preference | aspect_ratio | Count default |
50
+ |---|---|---|---|---|
51
+ | `product_shot` | `generate_image` | GPT Image 2 (clean studio look + dense label text) | `1:1` | 1 or `num_images: 3` for variants |
52
+ | `lifestyle_scene` | `generate_image` | Nano Banana 2 (best lifestyle realism) | `1:1` or `4:5` | 1 or `num_images: 3` |
53
+ | `closeup_product_with_person` | `generate_image` | Nano Banana 2 | `1:1` or `4:5` | 1 |
54
+ | `moodboard_pin` | `generate_image` | Nano Banana 2 | **`2:3`** (Pinterest native) | 1 or `num_images: 3` |
55
+ | `hero_banner` | `generate_image` | GPT Image 2 (large format + brand text) | `16:9` or `3:1` | 1 |
56
+ | `social_carousel` | **`generate_creative_director`** with `scene_count: 3–10` | Nano Banana 2 | `1:1` (IG) or `4:5` | `scene_count` |
57
+ | `ad_creative_pack` | **`generate_creative_director`** with `scene_count: 4–8` | GPT Image 2 or Nano Banana 2 | Mixed per ad placement (`1:1`, `9:16`, `1.91:1`) — fire one director call per aspect | `scene_count` |
58
+ | `virtual_model_tryout` | `generate_image_edit` with character Visual DNA + product source | Nano Banana Pro (identity-sensitive edits) | `1:1`, `4:5`, or `9:16` | 1–3 |
59
+ | `conceptual_product` | `generate_image` | Nano Banana 2 or GPT Image 2 | `1:1` or `2:3` | 1–4 |
60
+ | `restyle` | `generate_image_edit` with `source_images: [existing]` | Same model that produced the original (or Nano Banana 2 for safe re-render) | Inherit from source | 1–3 |
61
+
62
+ **For multi-output modes** (`social_carousel`, `ad_creative_pack`), always use `generate_creative_director` — never fire ≥2 `generate_image` calls in a loop. See `models/creative-director.md`.
63
+
64
+ **Always validate** `aspect_ratio` and `resolution` against the chosen model's `supported_aspect_ratios` / `supported_resolutions` via `list_models` — see SKILL.md "Resolution / Aspect / Duration — validate against caps".
65
+
66
+ ## Pre-Generation Interview (CRITICAL)
67
+
68
+ Ask **at most 4 short questions** before submitting, always with **labeled options, never open-ended**. Skip a question whose answer is obvious from context (uploaded image, prior turn, brand memory in `.kolbo/brand-kits/`).
69
+
70
+ Pick the question stack based on user state:
71
+
72
+ ### Type A — Uploaded a product photo, said "make me images / photoshoots"
73
+
74
+ 1. **How many?** `[1 / 3 / 5]`
75
+ 2. **What style/mood?** `[Clean studio / Lifestyle / Conceptual / With a model / Other]`
76
+ 3. **Where will you use them?** `[Shopify / Instagram / Pinterest / Paid ads / Website hero]`
77
+ 4. **Brand colors to match?** (skip if a brand kit exists at `.kolbo/brand-kits/<slug>.md`)
78
+
79
+ ### Type B — Uploaded a product photo + named a use case
80
+
81
+ E.g. "make ads for my product", "make a Pinterest pin", "make a hero banner". Mode is obvious. Ask only the gaps:
82
+
83
+ 1. **How many?** (only if multi-output mode)
84
+ 2. **What's the offer / mood / hook?**
85
+ 3. **Anything in particular to emphasize?**
86
+
87
+ ### Type C — Text only, no product photo
88
+
89
+ 1. **Can you upload a product photo?** (preferred — much higher fidelity)
90
+ 2. **If not, describe the product** — category, packaging, color, distinctive features
91
+ 3. **What style?** `[Clean studio / Lifestyle / Conceptual / With a model / Other]`
92
+ 4. **Where will you use it?** `[Shopify / Instagram / Pinterest / Paid ads / Website hero]`
93
+
94
+ ### Type D — Uploaded existing image, "redo / change vibe / different version"
95
+
96
+ → Mode: `restyle`
97
+
98
+ 1. **What aesthetic?** `[Clean girl / Cottagecore / Quiet luxury / Dark academia / Y2K / Other]`
99
+ 2. **Seasonal context?** `[Christmas / Valentine's / Halloween / Black Friday / None]`
100
+ 3. **What to preserve, what to change?** (only if ambiguous)
101
+
102
+ ### Type E — Model wearing a product (fashion, accessories)
103
+
104
+ → Mode: `virtual_model_tryout`
105
+
106
+ 1. **Model archetype?** (suggest 2–3 based on brand audience — don't open-end)
107
+ 2. **Environment?** `[Studio clean / Outdoor natural / Street style / Editorial / Home cozy]`
108
+ 3. **Framing?** `[Full body / Three-quarter / Waist up / Closeup on product area]`
109
+
110
+ ### Type F — Vague request, unclear subject
111
+
112
+ E.g. "make me something cool for my brand".
113
+
114
+ 1. **What product or topic?**
115
+ 2. **Goal?** `[Sell on a marketplace / Build awareness / Run paid ads / Update website]`
116
+ 3. **Upload a reference image?**
117
+
118
+ After answers → return to the relevant Type A–E.
119
+
120
+ ## Brand Kit Integration
121
+
122
+ Before any generation, check if `.kolbo/brand-kits/<slug>.md` exists for the brand:
123
+
124
+ - **Exists** → Read it. Pull `primary_color`, `accent_color`, `fonts`, `logo_url`. Bake hex codes + named fonts into the prompt. Pass the logo as `reference_images[0]` if relevant.
125
+ - **Doesn't exist** but user gave a brand URL → Run `workflows/research-first.md` first to build one.
126
+ - **Doesn't exist** and user gave no URL → Proceed without; ask in Type A's question 4 if relevant.
127
+
128
+ ## Multi-Variant Strategy
129
+
130
+ For `count > 1` on a single-output mode (`product_shot`, `lifestyle_scene`, `closeup_product_with_person`, `moodboard_pin`, `hero_banner`, `conceptual_product`):
131
+
132
+ - Use `num_images: N` on `generate_image` — same prompt, different seeds, fast.
133
+ - Variations come from the model's randomness, not intentional direction.
134
+
135
+ For `social_carousel` / `ad_creative_pack` (multi-output by design):
136
+
137
+ - Use `generate_creative_director` with `scene_count: N`.
138
+ - Each scene gets its **own intentional prompt** (different angle / framing / mood / palette) — not paraphrased copies of one scene.
139
+ - Pass the same `visual_dna_ids` and `reference_images` across all scenes to lock product identity.
140
+
141
+ ## Output Discipline
142
+
143
+ - Call the chosen MCP tool — single command, no preamble.
144
+ - For multi-output: `generate_creative_director` returns N URLs; share them as individual lines (do NOT build an HTML grid artifact — the canvas already shows the gallery).
145
+ - For single-output: one image URL.
146
+ - Log every URL + model + resolution + mode into `.kolbo/production.md` under `### <Mode>` subsection.
147
+
148
+ ## UX Rules
149
+
150
+ 1. **Pick the mode by intent**, not surface keyword. The user saying "Pinterest" → `moodboard_pin` regardless of what's IN the image.
151
+ 2. **Ask at most 4 labeled-option questions** before generating. Skip any question whose answer is obvious.
152
+ 3. **Always confirm aspect ratio + resolution + count** before firing — they materially change output and cost.
153
+ 4. **Reuse brand kits** — Read `.kolbo/brand-kits/<slug>.md` before generating.
154
+ 5. **Strict NO uninvited additions** — "NO captions, NO subtitles, NO watermarks, NO extra text beyond what's specified" in every prompt.
155
+ 6. **No auto-retry on failure** — surface and let the user adjust.
156
+
157
+ ## Prompt Template Seeds
158
+
159
+ ### `product_shot`
160
+ ```
161
+ Clean studio product photograph of @image1 (the product),
162
+ centered on a {neutral white | seamless gradient | catalog beige} background.
163
+ Soft front-fill + subtle rim light, no harsh shadows, no reflections.
164
+ Tack-sharp focus on the product, slight depth-of-field falloff on the background.
165
+ {Brand palette: primary #..., accent #...}
166
+ NO captions, NO watermarks, NO extra text.
167
+ ```
168
+
169
+ ### `lifestyle_scene`
170
+ ```
171
+ @image1 (the product) in a {real-world scene description},
172
+ natural {time-of-day} light, {natural action involving the product}.
173
+ Photographic, editorial style, {iPhone | 35mm film | medium format} feel.
174
+ {Optional: include hands, partial face — never identifiable people}.
175
+ {Brand palette baked into props/clothing}.
176
+ NO captions, NO watermarks.
177
+ ```
178
+
179
+ ### `moodboard_pin`
180
+ ```
181
+ Vertical 2:3 Pinterest pin, moodboard aesthetic.
182
+ @image1 (the product) integrated into a {seasonal/aesthetic theme} flatlay or scene.
183
+ {Aesthetic anchor: cottagecore / quiet luxury / Y2K / clean girl / dark academia}.
184
+ Soft natural light, low-saturation editorial palette,
185
+ optional textural overlay (paper, linen, marble).
186
+ Centered hero composition, generous negative space at top for pin overlay.
187
+ NO captions, NO text.
188
+ ```
189
+
190
+ ### `restyle`
191
+ ```
192
+ @image1 — preserve {subject / composition / camera angle / framing} exactly.
193
+ Change ONLY the {aesthetic / season / mood} to {target aesthetic description}.
194
+ Keep product geometry, label legibility, and identifying details unchanged.
195
+ {Specific change list, e.g.: "swap warm tones for cool blue/silver, add subtle snowflake bokeh,
196
+ shift wood prop to ceramic, keep everything else identical"}.
197
+ ```
198
+
199
+ (More seeds belong here as we learn from real Kolbo generations — append, don't replace.)
@@ -0,0 +1,155 @@
1
+ # Production Log — `.kolbo/production.md`
2
+
3
+ Load this file when starting a multi-step production, or before any continuation of prior media work ("edit", "redo", "the same character", `@name` references, "scene N").
4
+
5
+ ## Why It Exists
6
+
7
+ Every URL, id, and brief produced by a Kolbo MCP tool MUST be recorded in `.kolbo/production.md` in the user's workspace. This file — not chat history — is your source of truth for prior artifacts: URLs scattered across `tool_result` blobs are unreliable to re-scan and disappear entirely on context compaction.
8
+
9
+ ## When to READ it
10
+
11
+ Read `.kolbo/production.md` **before** acting on any of these signals:
12
+ - "edit", "animate", "combine", "redo", "polish", "fix", "regenerate"
13
+ - "the same character / scene / image / video / sound", "that X", "scene N", "the rainy one", etc.
14
+ - `@name` references for Visual DNA
15
+ - Any continuation of prior media work ("now make scene 3")
16
+
17
+ If the file is missing and the user is referencing prior media, ask the user — do not guess from chat.
18
+
19
+ ## When to WRITE to it
20
+
21
+ **Immediately after every successful generation tool call**, before your next tool call or your final reply. The runtime will inject a reminder after generation tool results — treat that as a hard rule, not a suggestion.
22
+
23
+ Tools that REQUIRE logging:
24
+ - `generate_image`, `generate_image_edit`, `edit_image`
25
+ - `generate_video`, `generate_video_from_image`, `generate_video_from_video`, `edit_video`
26
+ - `generate_elements`, `generate_first_last_frame`, `generate_lipsync`
27
+ - `generate_music`, `generate_sound`, `generate_speech`
28
+ - `generate_3d`, `generate_creative_director`
29
+ - `create_visual_dna`, `upload_media`
30
+
31
+ Tools that do NOT log: `list_*`, `get_*`, `check_credits`, `chat_*`, `transcribe_audio` (read-only / discovery).
32
+
33
+ ## File creation — pick the right tool to avoid the "must Read first" error
34
+
35
+ `Edit` refuses to overwrite a file unless you've `Read` it first in the same session. Pick by file state:
36
+
37
+ | State | Tool |
38
+ |---|---|
39
+ | File **does not exist** (typical first turn) | `Write` with the full stub below |
40
+ | File **exists** | `Read` first, then `Edit` |
41
+ | Not sure | `Read` first; on ENOENT, fall back to `Write` |
42
+
43
+ Stub for first creation:
44
+
45
+ ```md
46
+ <!-- .kolbo/production.md — agent-managed media artifact registry.
47
+ User may hand-edit; agent must Read-before-Edit to reconcile. -->
48
+
49
+ # Production Log
50
+
51
+ ## 🎯 Now
52
+
53
+ **Brief:** <paraphrase of user's overall goal in 1-3 sentences>
54
+ **Now working on:** <the immediate next step>
55
+ **Last updated:** <ISO date>
56
+
57
+ ---
58
+
59
+ ## Production: <name from user's request, slugified human label>
60
+
61
+ ### Cast
62
+ ### Visual DNA
63
+ ### Scenes
64
+ ### Audio
65
+ ### Final
66
+ ```
67
+
68
+ Subsections (`### Cast` etc.) are **suggested defaults**, not required. Adapt: a logo set has `### Logos`, an album has `### Tracks`, a 3D render has `### Models`. Leave empty subsections out of the file when you create entries.
69
+
70
+ ## Entry shape
71
+
72
+ One bullet per artifact. Write the label **the way the user would reference it next time** ("the rainy one"), not the model's raw output.
73
+
74
+ ```md
75
+ ### Cast
76
+ - **Maya** — female, 30, urban photographer, leather jacket
77
+ - portrait: https://...characters/maya.png (nano-banana-2, 2026-05-13)
78
+ - visual DNA: vdna_8f2c (@maya)
79
+
80
+ ### Scenes
81
+ 1. **Coffee shop morning** — Maya at counter, soft light, wide shot
82
+ - still: https://...scenes/01-coffee.png (flux-2-pro, 2026-05-13)
83
+ - video: (pending)
84
+ 2. **Rainy street walk** — neon reflections, slow dolly
85
+ - still: https://...scenes/02-rain.png (flux-2-pro, 2026-05-13)
86
+ - video: https://...videos/02-rain.mp4 (kling-2, 2026-05-13)
87
+ ```
88
+
89
+ ## Header rewrite rule (Manus pattern — IMPORTANT)
90
+
91
+ The `## 🎯 Now` block at the top of the file is **rewritten every turn** to keep the brief + current step near the model's recency window. Body sections (everything below the first `---`) are **append-only**.
92
+
93
+ When a user request supersedes a previous artifact (e.g., "redo scene 2 with more rain"), do not delete the old entry. Mark it `(superseded YYYY-MM-DD)` and place the new entry beneath:
94
+
95
+ ```md
96
+ 2. **Rainy street walk** — neon reflections, slow dolly
97
+ - still: https://...scenes/02-rain.png (superseded 2026-05-13)
98
+ - still: https://...scenes/02-rain-v2.png (flux-2-pro, 2026-05-13)
99
+ - video: https://...videos/02-rain-v2.mp4 (kling-2, 2026-05-13)
100
+ ```
101
+
102
+ ## Rules
103
+
104
+ 1. **First touch `Write`, subsequent touches `Read` → `Edit`** (see "File creation" above). If `Edit` fails on exact-match, `Read` again — the user may have hand-edited.
105
+ 2. **Plain English labels** — write what the user would call it.
106
+ 3. **Append-only body.** Only the `## 🎯 Now` header is rewritten. Never delete artifact entries; mark them `(superseded)` instead.
107
+ 4. **Do not log failures.** Only successful generations.
108
+ 5. **Resolve user references via the log, not chat history.** If the user says "scene 3," use the URL the log says is scene 3, even if a later tool_result mentioned a different URL.
109
+ 6. **One file per workspace.** Multiple concurrent productions go under separate `## Production: <name>` headings inside the same file.
110
+
111
+ ## Bulk Generation Entry Shape
112
+
113
+ For batch runs (50-item UGC sets, etc.), persist every `generation_id` (even for failures) — required for `get_generation_status` recovery and cross-session dedupe.
114
+
115
+ ```md
116
+ 12. ✅ Asian F 24, bedroom, hype POV
117
+ - generation_id: gen_8a2c…
118
+ - url: https://…
119
+ - model: seedance-2 · 720p · 10s · sound-on
120
+ - generated: 2026-05-14T07:42Z
121
+ 13. ❌ Latino M 31, gym
122
+ - generation_id: gen_ff19…
123
+ - error: 429 Too many generation requests
124
+ - retry_after: 2026-05-14T07:43Z
125
+ ```
126
+
127
+ ## Always log the resolution / duration / sound choices
128
+
129
+ Production-log entries should include the resolution and (for video) duration + sound state alongside the URL, so the user can see what they paid for:
130
+
131
+ ```md
132
+ - still: https://...01-coffee.png (flux-2-pro · 1K, 2026-05-14)
133
+ - video: https://...02-rain.mp4 (kling-2 · 1080p · 5s · sound-off, 2026-05-14)
134
+ ```
135
+
136
+ ## Production Log vs TodoWrite
137
+
138
+ Use both — different jobs:
139
+
140
+ | | `.kolbo/production.md` | `TodoWrite` |
141
+ |---|---|---|
142
+ | Purpose | Durable artifact registry | Ephemeral step plan |
143
+ | Lifetime | Persists across sessions / compaction | Per turn / per request |
144
+ | Content | URLs, ids, briefs | "Do X, then Y, then Z" |
145
+ | Example | `still: https://...01-coffee.png` | `Generate visual DNA for Maya` |
146
+
147
+ ## Real Cost Quoting
148
+
149
+ Every generation now returns `credits_used` (multiplier-adjusted total) and `credits_breakdown` (per-model attribution). **Log `credits_used` to `.kolbo/production.md`, not `base × count`.**
150
+
151
+ ```json
152
+ { "credits_used": 12, "credits_breakdown": [{ "model": "nano-banana-2", "base": 8, "final": 12, ... }], "urls": [...] }
153
+ ```
154
+
155
+ When the user asks "how much did I spend?" → call `get_session_usage` for the real, multiplier-adjusted session total + per-tool + per-model breakdowns (same numbers as the desktop bottom-bar counter).
@@ -0,0 +1,174 @@
1
+ # Research-First Creative — Scrape Before Generating
2
+
3
+ Load this file when the brief involves a real brand, product URL, audience, or market — especially for ads, marketing creative, or anything tied to identity / brand palette / on-image text.
4
+
5
+ ## Why
6
+
7
+ When the user gives you a **product URL, brand reference, or "make X for Y audience" brief**, don't jump straight to prompts. Spend one turn researching first — the cost of a single research turn is far less than 10 mis-aimed generations.
8
+
9
+ ## When to do research-first
10
+
11
+ - Any URL appears in the brief (product page, landing page, brand site)
12
+ - The brief names a brand, product, or company you don't already have context on
13
+ - The brief targets a specific audience / language / market with conventions you should respect (Hebrew/Israeli, Japanese, Gen-Z TikTok, B2B SaaS, luxury, etc.)
14
+ - The brief explicitly says "research" / "תחקור" / "look up" / "find examples" / "check best practices"
15
+
16
+ ## How to research (parallel calls in one response)
17
+
18
+ Fire these IN PARALLEL — they're independent reads:
19
+
20
+ 1. **`WebSearch`** for prompt-engineering patterns specific to the chosen model. **The model name in the search query MUST be the literal model the user named** — never substitute a generic / default / "popular" model. If the user said "nano banana 2", search for `"nano banana 2" prompt …`, NOT `"flux" prompt …` or `"midjourney" prompt …`. The same HARD RULE that applies to *calling* the named model applies to *researching* it. Examples (replace `<model>` with the user's exact wording):
21
+ - `"<model>" prompt engineering ad image text rendering`
22
+ - `"<model>" hex color font specification advertising prompt`
23
+ - `"<model>" hebrew text RTL rendering` (or any user-named language)
24
+ 2. **`WebSearch`** for the audience / market design conventions:
25
+ - `<audience> advertising design trends <year>`
26
+ - `<language> typography <use case> RTL/LTR best practices`
27
+ 3. **`WebFetch`** the product URL with a precise extraction prompt (see below).
28
+ 4. (Optional) `WebSearch` for competitor / reference visuals to set bar.
29
+
30
+ ## Extracting the product page (WebFetch prompt template)
31
+
32
+ Don't ask WebFetch a vague "what is this page" — ask for structured extraction:
33
+
34
+ ```
35
+ Extract from this page, in compact bullets:
36
+ 1. Product name + one-line value proposition.
37
+ 2. 3–5 concrete capabilities/benefits (user-facing language).
38
+ 3. All product hero / screenshot image URLs visible in the page.
39
+ 4. Brand color hex codes — pull from inline `style=`, `<style>` tags, or
40
+ linked CSS, ignoring generic UI defaults (#fff/#000). Identify which
41
+ color plays which role (primary CTA, headline text, background, accent).
42
+ 5. Brand voice signals (tone, target user, formality).
43
+ 6. Any explicit fonts named in CSS or visible.
44
+ ```
45
+
46
+ ## Re-host every external image via `upload_media`
47
+
48
+ The bulk-API rule applies: external URLs in `reference_images` / `source_images` / `image_url` cause **400 Bad Request**. Pipeline:
49
+
50
+ 1. `Bash: curl -fsSL "<external-url>" -o /tmp/<name>.<ext>` (or use WebFetch where it returns the binary)
51
+ 2. `mcp__kolbo__upload_media` with the local file → returns Kolbo CDN URL
52
+ 3. Use the returned CDN URL in any subsequent generation call
53
+ 4. Log both URLs in the production log (so the user can trace provenance)
54
+
55
+ ## Synthesizing the research
56
+
57
+ In the production log create:
58
+ ```md
59
+ ### Research notes
60
+ - Prompt patterns for <model>: …
61
+ - Audience conventions: …
62
+
63
+ ### Product brief
64
+ - Name: …
65
+ - Value prop: …
66
+ - Capabilities: …, …, …
67
+
68
+ ### Brand palette
69
+ - primary: #...
70
+ - accent: #...
71
+ - text: #...
72
+ - bg: #...
73
+
74
+ ### Re-hosted assets
75
+ - hero_1: <kolbo CDN url> (from <original url>)
76
+ ```
77
+
78
+ ## Persist as a Reusable Brand Kit
79
+
80
+ After research, **persist the brand-identity bits into a reusable file** at `.kolbo/brand-kits/<slug>.md` so future generations in any session can read it instead of re-scraping. This is the durable, cross-session record (the production log is per-production; brand kits are per-brand).
81
+
82
+ **Slug rule:** lowercase, single token, derived from the domain (`drinkolipop` from `drinkolipop.com`, `acme_skincare` from `acme-skincare.io`). Strip TLD and hyphens.
83
+
84
+ **Brand kit file schema** (use `Write` for first creation; `Read → Edit` for updates):
85
+
86
+ ```md
87
+ <!-- .kolbo/brand-kits/<slug>.md — agent-managed brand identity registry.
88
+ Reusable across all generations for this brand. Read first before scraping. -->
89
+
90
+ # Brand Kit: <Brand Name>
91
+
92
+ url: https://...
93
+ fetched: 2026-05-23
94
+ last_refreshed: 2026-05-23
95
+
96
+ ## Identity
97
+ brand_name: ...
98
+ tagline: ...
99
+ business_overview: <1-2 sentences>
100
+ industry: <fashion | beauty | food | beverage | electronics | saas | ...>
101
+
102
+ ## Visuals
103
+ logo_url: <kolbo CDN url, re-hosted via upload_media>
104
+ primary_color: #...
105
+ accent_color: #...
106
+ text_color: #...
107
+ bg_color: #...
108
+ fonts:
109
+ headline: <font name>
110
+ body: <font name>
111
+ mono: <font name, optional>
112
+
113
+ ## Voice & Audience
114
+ tone: <playful | refined | technical | bold | warm | ...>
115
+ target_user: <one-line persona>
116
+ formality: <casual | professional | luxury>
117
+
118
+ ## Hero Assets (re-hosted via upload_media)
119
+ - hero_1: <kolbo CDN url> (from <original url>)
120
+ - hero_2: <kolbo CDN url> (from <original url>)
121
+ - product_1: <kolbo CDN url> (from <original url>)
122
+
123
+ ## Notes
124
+ - Any brand-specific gotchas, design rules, do-not-show items
125
+ ```
126
+
127
+ ### When to READ a brand kit
128
+
129
+ Before any generation tied to a known brand — **always** Read first:
130
+
131
+ - User mentions a brand by name ("make a Pinterest pin for OliPop")
132
+ - User pastes a brand URL again ("make ads for drinkolipop.com")
133
+ - User says "use the same brand as last time" / "match our brand"
134
+ - Any DTC ad / product photoshoot / marketplace card request where the brand is implicit
135
+
136
+ If `.kolbo/brand-kits/<slug>.md` exists, **skip the research-first workflow entirely** for the brand-extraction parts (palette, logo, fonts, voice). Still do `WebSearch` for fresh prompt-engineering patterns or audience trends if needed.
137
+
138
+ If it doesn't exist and there's a URL, run the full research workflow above and **end by persisting the brand kit**.
139
+
140
+ ### When to UPDATE a brand kit
141
+
142
+ - User explicitly says "the brand updated their colors / logo / fonts"
143
+ - Brand kit is >90 days old AND the user is starting a major campaign (refresh recommended, not mandatory)
144
+ - Generation results look "off-brand" and palette is suspect — refresh to verify
145
+
146
+ Update by `Read → Edit`. Bump `last_refreshed`. Keep older asset URLs in place (they still work) and append new ones.
147
+
148
+ ### Brand-kit reuse downstream
149
+
150
+ The other workflow files consume the brand kit:
151
+
152
+ - `workflows/dtc-ads.md` — pulls palette + fonts + logo into every ad prompt
153
+ - `workflows/product-photoshoot.md` — bakes hex codes into prompts; uses logo as `reference_images[0]`
154
+ - `workflows/marketplace-cards.md` — palette + fonts critical for A+ module consistency
155
+ - `workflows/marketing-studio.md` — voice/tone shapes UGC presenter dialogue; palette shapes any branded overlays
156
+
157
+ Always cite the brand-kit slug in the production log so reviewers can trace which kit drove a given generation.
158
+
159
+ ## Building prompts informed by the research
160
+
161
+ When generating ad / marketing creative based on this research:
162
+
163
+ - **Exact hex codes for every color** — `#FF4D2E` not "orange". Match brand palette.
164
+ - **On-image text in literal double quotes** — `"שלום עולם"` not `Hebrew greeting`. Specify language and direction (RTL/LTR) when non-English.
165
+ - **Per text element**: position, font weight, point size, color hex, alignment.
166
+ - **Forbid uninvited additions** — explicitly tell the model: NO captions, NO subtitles, NO watermarks, NO extra text beyond what's specified. Same rule as UGC defaults.
167
+ - **Use research findings to shape composition** — e.g. if research said "Israeli social ads favor bold contrast and minimal copy", reflect that.
168
+ - Always **approve the concept + sample prompts with the user** before firing the full batch when the batch is ≥4 ads or the user said "approve first".
169
+
170
+ ## Skipping research is OK when…
171
+
172
+ - User gave no URL, no brand, no audience-specific signal — pure creative ("make a sunset")
173
+ - User said "skip research" / "just generate" / "I have the prompt ready"
174
+ - The brief is for a single quick draft