@kolbo/kolbo-code-linux-x64
Advanced tools
+1
-1
| { | ||
| "name": "@kolbo/kolbo-code-linux-x64", | ||
| "version": "2.4.3", | ||
| "version": "2.4.4", | ||
| "os": [ | ||
@@ -5,0 +5,0 @@ "linux" |
| <!-- PARITY: this file mirrors getSeedancePromptSystemPrompt() in | ||
| kolbo-api/src/config/systemPrompt.js (lines ~775–855). | ||
| kolbo-api/src/config/systemPrompt.js. | ||
| When that function changes, update this file in the same session. | ||
@@ -14,3 +14,3 @@ See packages/opencode/CLAUDE.md "MCP & Skill Sync Rule". --> | ||
| - **First line ALWAYS declares shot structure**: total duration, shot count, aspect ratio. Example: `Total: 15s / 6 shots / 16:9`. Put it at the BOTTOM of the prompt too. | ||
| - **First line ALWAYS declares shot structure**: total duration, shot count, aspect ratio. Example: `Total: 15s / 6 shots / 16:9`. Put it at the BOTTOM of the prompt too. For connected narrative sequences the proven phrasing is `N connected cinematic shots, 15 seconds total, 16:9, Multishot ON` — use it and keep `Multishot ON` for any multi-shot story. | ||
| - **Order inside each shot**: Subject → Action → Camera → Style → Constraints → (Audio/SFX if relevant). | ||
@@ -64,2 +64,132 @@ - **Prompt length**: aim for ~120–280 words TOTAL across all shots combined (not per shot). Shorter than ~120 words = random output. Longer risks the 8000-char cap below and makes the model forget the opening. For 6-shot prompts, keep each shot 1–2 tight sentences. | ||
| ### 6. Reference-Anchored Cinematic Sequence (multi-character / named references — highest-fidelity format) | ||
| Use whenever the user gives named characters or multiple reference images (`@Image1`, `@Image2`, …) — a tactical unit clearing a bunker, a duel between two referenced characters, a war scene. **This is always an Elements-mode prompt** (route the card to `elements`). Structure: | ||
| 1. **Labeled scene header FIRST** (grounds the scene before any shot): | ||
| - `Time of day:` — hour + light quality + atmosphere (dust, haze, heavy silence before action). | ||
| - `Location:` — the environment in concrete physical detail (materials, wear, light direction, high-contrast blown-out entrance, etc.). | ||
| - `Characters:` — ONE line per person: `Name @ImageN — wardrobe, position in frame, what they carry`. End with "All must match their character references exactly." | ||
| 2. **REFERENCE CONSISTENCY block** — map every reference and pin what must NOT change: `Reference Image 1 is <X>. Preserve exact face, hair, anatomy, wardrobe, colors, props.` Add per-character energy/aura color rules, and any already-established story state (e.g. "the gem is already shattered — no intact gem, no red glow"). End with "Do not redesign, morph, recolor, or swap either character, their clothing, anatomy, weapons, or the environment." | ||
| 3. **Shots** — either titled (`Shot 1 — Medium Wide / Tactical Positioning`) or timecoded (`SHOT 1 — 0:00–0:03`); timecodes must sum to the total duration. Under each shot use **Camera → Action → Audio** in that order. | ||
| 4. **Continuity** — to chain a series, open with `Begin as a seamless continuation from <the exact last beat of the previous video>.` | ||
| 5. Close with whichever **Power Blocks** below actually apply (this format usually warrants all three; a simpler scene may need only AUDIO). | ||
| ## Power Blocks (CONDITIONAL — add ONLY the ones the shot actually needs; never pad a simple prompt) | ||
| These elevate rich cinematic / reference-anchored sequences. For a short, tight, single-idea prompt, skip them — the skill's "short prompts can hit hard, don't pad" rule wins. Apply each only when it earns its place: | ||
| - **AUDIO** — Seedance renders sound, so specify it whenever sound matters to the scene (most cinematic/action shots). Default diegetic: `AUDIO: No musical score. Synchronized production sound only:` then a comma list of the exact sounds in narrative order (boots scraping concrete, sling shift, layered breathing, distant sirens, weapon impacts, cloth movement, rushing air). Call for a musical score if the user wants one. Skip the block entirely for a deliberately silent or trivially simple shot. | ||
| - **AVOID** — add when there's real drift risk: referenced characters/DNAs, an established story state, or a specific content tone to enforce. `AVOID:` + the drifts to forbid: character morphing, costume/anatomy changes, missing signature details (a piercing, a scar), camera looking into the lens, glamorous posing, duplicated characters, extra weapons, text / subtitles / logos, plus content-specific negatives (e.g. "intact gemstone, red aura" once it's destroyed). Skip it when there's nothing meaningful to forbid. | ||
| - **PHYSICAL GROUNDING** — only when the shot has a real contact/impact (a boot planted on a chest, a weapon lock, a body thrown): spell out weight transfer, full contact, stable balance, material reaction, and the victim's physical response. Not needed for talking, walking, or ambient shots. | ||
| ## Dialogue & expression | ||
| - Dialogue goes in quotes and may be in ANY language (Hebrew included). For silent tension, deliver it as expression, not speech: `He does not speak. His expression clearly says: "…"`. | ||
| ## Content tone | ||
| - **Brutal war realism** — allow `Hollywood-style blood squib` impacts (visible spray, spreading stain on clothing, violent body reaction, hard collapse) when the user wants gritty combat. | ||
| - **Restrained / no-gore** — when intensity is wanted without gore, state it explicitly (`brutal supernatural strike but no blood, no open wound, no exposed flesh`) AND add the gore terms to the AVOID list. | ||
| - **Rapid-cut montage** (`N cuts / 2 seconds each`) — a valid structure: fixed-length hard cuts, vary the angle every cut (wide / medium / low / side / close handheld), state "Hard cuts. No slow motion," and reserve slow motion for a single named beat if any. | ||
| ## Universal Craft Layer (apply on top of any format above) | ||
| > This is the universal film-direction layer that lifts every prompt above the boilerplate. **Deep-dive reference:** `~/.kolbo/skills/seedance-2-prompting/SKILL.md` (Craft Edition — full block structure, every optical technique, and the pre-flight checklist). | ||
| ### Core principle | ||
| The model reacts to what can be **seen and measured**, not to mood words. Translate abstractions into observables. | ||
| - ❌ "tense scene" → ✅ "man freezes, slowly clenches his fist, light only from the side, half his face in shadow" | ||
| - ❌ "cool cinematic shot of a car, epic, fast" → ✅ "low tracking shot alongside the car as it powers through a wet curve, headlights glowing, spray off the tyres, hard buffeting camera shake" | ||
| ### Style — DISTRIBUTED, not a prefix | ||
| Never pile all style tokens at the top of the prompt. Each aspect lives in the block that already governs it: | ||
| - Lighting → inside the shot's LIGHTING description | ||
| - Lens / FOV → in OPTICS | ||
| - Color → either an explicit grade (when strong / stylized) or folded into LOCATION + LIGHTING for naturalistic looks | ||
| - Skin / acting → in PERFORMANCE | ||
| - Physics → in PHYSICS | ||
| - Format / resolution / grain → at the END as a suffix stack (before LOCKS) | ||
| ### Shot sizes | ||
| | Abbr | Meaning | In frame | | ||
| |------|---------|----------| | ||
| | ECU | Extreme Close-Up | a detail: eyes, button, headlight, hand | | ||
| | CU | Close-Up | full face / one element large | | ||
| | MCU | Medium Close-Up | head and shoulders | | ||
| | MS | Medium Shot | roughly to the waist | | ||
| | WS | Wide Shot | full figure + surroundings | | ||
| | EWS | Extreme Wide | scale, location | | ||
| ### FOV anchor table (degrees — what to write in the prompt) | ||
| | FOV | mm equiv | Purpose | | ||
| |-----|----------|---------| | ||
| | 180° | Fisheye | spherical distortion | | ||
| | 107° | 14–16mm | architectural ultra-wide | | ||
| | 84° | 20–24mm | wide | | ||
| | 63° | 28–35mm | observational | | ||
| | 47° | 40–50mm | neutral human perspective | | ||
| | 29° | 75–85mm | portrait compression | | ||
| | 18° | 100–135mm | natural portrait | | ||
| | 12° | 180–200mm | tele-detail | | ||
| | 8° | 300–400mm | extreme compression | | ||
| Use only the discrete steps. Not "23°" — use 18° or 29°. | ||
| ### Prompting rules | ||
| - **Positive only.** ❌ "does not fall backward" → ✅ "stays upright, feet planted." | ||
| - **Speeds in km/h.** ❌ "fast/slow" → ✅ "moves at 40 km/h", "camera pans at 5 km/h." | ||
| - **Atmosphere in % / meters.** ❌ "light fog" → ✅ "fog density 40%", "haze visible at 15 meters depth." | ||
| - **Atmosphere builds in steps across shots.** Shot 1: 20% → Shot 2: 40% → Shot 3: 60%. | ||
| - **Giant scale via human-height.** ❌ "huge, three meters tall" → ✅ "stands as tall as four humans stacked." | ||
| - **Left/right is from the camera.** "Subject moves left" = left from the camera's view. | ||
| - **Emotion through muscle movement**, not labels. ❌ "she looks sad" → ✅ "her eyes drop to the table, jaw tightens, she swallows once before answering." | ||
| - **WB in Kelvin.** 3200K / 4000K / 5600K / 8500K. Pick ONE for the scene's mood. | ||
| - **Color as material + light + role**, never a flat list. ❌ "she wears red, he wears blue" → ✅ "crimson silk scarf catching the cold tungsten spill from the corridor". | ||
| - **No equipment names**, no director references, no "shot on ARRI / Sigma 85mm / Roger Deakins". | ||
| ### Cuts and timing | ||
| - **Single continuous shot (oner)** → "one continuous shot, the camera does not cut on its own." | ||
| - **Sequential cuts, no timecodes** → "CUT 1 … CUT 2 … CUT 3". | ||
| - **Timed multishot** → explicit HARD CUTs at stated seconds, with timecode blocks `0.0s to 1.0s — [description]`. | ||
| - **Mixed real-time + slow-mo** → hard cuts only between speed modes. Each shot one speed start to finish. | ||
| ### Special protocols | ||
| - **4-mechanism multishot consistency stack** (extreme FOV: 8°, 107°): (1) sequence-wide identity lock, (2) LENS LOCK opener per beat, (3) LENS CHECK closer per beat, (4) color via material + light, not as a list. All four required. | ||
| - **Whip-pan timing:** 0.3s Subject A settled → 0.8s WHIP motion-blur → 1.4s Subject B settled. Whip under 0.8s renders as a hard cut without blur. | ||
| - **Anti-impact lock** (cracks/breaks without impact): "crowd PRESSES, not strikes", "fracture originates from edge stress, not center impact", "no impact point — pressure-based crack." | ||
| ### Optical techniques | ||
| - **Observation pattern (hidden-camera):** foreground occlusion 20–30% + atmospheric haze + 8°–12° super-tele vantage. | ||
| - **Sports broadcast:** 8° super-tele + handheld 1–2cm tremor + "anchored at distance, finding the action". | ||
| - **Tele compressed air column** at 8°–12°: "dust suspended in the long compressed air column between camera and subject". | ||
| ### Camera placement | ||
| Place CAMERA in the **3rd position** of each shot's core layers (Subject → Action → Camera → Style → Constraints). FOV gets ignored at the end, conflicts with identity at the front. | ||
| ### Pre-flight checklist (before output) | ||
| - Distributed style (no top-pile)? | ||
| - One camera movement per time slice? | ||
| - FOV in degrees from the table (not mm, not arbitrary)? | ||
| - WB in Kelvin? | ||
| - Speed in km/h, atmosphere in % or meters? | ||
| - Color via material + light + role? | ||
| - Positive phrasing (no "does not X")? | ||
| - No equipment / director names? | ||
| - Emotion through muscle, not labels? | ||
| - Multishot: FOV per segment + "no drift mid-segment"? | ||
| - 8000-char cap honored? | ||
| ## Grid Storyboard Mode (3×3 grid input) | ||
@@ -85,9 +215,18 @@ | ||
| - Final prompt(s) ALWAYS in a fenced code block ready to paste into the Seedance `prompt` field (or pass as `prompt` on `generate_video` / `generate_elements`). | ||
| - Final prompt(s) ALWAYS in a fenced code block ready to paste into Seedance. | ||
| - After the code block, give a 1-line "why this works" note (camera/escalation/physics choice). | ||
| - If user asked in any language other than English, write your explanation in their language but keep the prompt itself English. | ||
| - **Never exceed 8000 characters TOTAL** for the entire prompt as one string — that is the WHOLE prompt including every shot, every line of boilerplate, every SFX list, every newline. NOT 8000 per shot — 8000 for the prompt as one combined unit. Count before output. If over, rewrite tighter (cut adjectives, collapse boilerplate, merge or drop shots). NEVER split into multiple prompts / multiple code blocks / "part 1 / part 2" to work around the limit. | ||
| - **Never exceed 8000 characters TOTAL for the entire prompt as one string** — that is the WHOLE prompt including every shot, every line of boilerplate, every SFX list, every newline. NOT 8000 per shot — 8000 for the prompt as one combined unit. Count before output. If over, rewrite tighter (cut adjectives, collapse boilerplate, merge or drop shots). NEVER split into multiple prompts / multiple code blocks / "part 1 / part 2" to work around the limit. | ||
| ## Where to run in Kolbo | ||
| Seedance 2 lives in the **Video** category. Route the prompt card by the INPUTS: | ||
| - **First & Last Frame** (`first_last_frame` tag) when the video must begin on one frame and end on another (start + end image, morph A→B). This wins even if Visual DNAs / characters / elements are referenced inside it — First-Last-Frame supports DNAs/elements too. | ||
| - **Elements** (`elements` tag) when the scene is built from reference assets — a Visual DNA / character (`@name`), a moodboard (`#name`), or reference images composed into a NEW scene, with no explicit start+end frame. This is the default for any "@Character does X" / loopable-idle / new-scene-from-my-refs request. | ||
| - **Image-to-Video** (`image_to_video` tag) only when a single existing image is animated as-is. | ||
| - **Text-to-Video** (`text_to_video` tag) only when there is no reference image or character at all. | ||
| ## Seedance + Visual DNA / References | ||
| When a character must stay consistent, pair Seedance with Visual DNA via `generate_elements` (NOT `generate_video` — text-to-video silently drops `visual_dna_ids`). Tag the DNA inside the prompt with `@<dna-name>` — see `workflows/visual-dna.md`. For grid/storyboard inputs, the source frame is `@image1`. | ||
| When a character must stay consistent, pair Seedance with Visual DNA via `generate_elements` (NOT `generate_video` — text-to-video silently drops `visual_dna_ids`). Tag the DNA inside the prompt with `@<dna-name>` — see `workflows/visual-dna.md`. For grid/storyboard inputs, the source frame is `@image1`. |
@@ -35,2 +35,30 @@ # Media Library | ||
| ## Local files — pick by where the SERVER runs, not by which client you are | ||
| A tool call executes on the Kolbo server. Handing it `C:\Users\...` or `/Users/...` | ||
| gives it a *string*, not the bytes — so a local path only resolves when server and | ||
| client share a filesystem. Choose by transport: | ||
| | Situation | Call | | ||
| |---|---| | ||
| | **Local (stdio) install** — `npx @kolbo/mcp` on the same machine | `upload_media` with the absolute path | | ||
| | **Remote connector + you can run shell commands** (Claude Code, Codex, Cursor, CI) | `create_upload_ticket`, then POST each file to `upload_url` | | ||
| | **Remote connector, no filesystem** (claude.ai web/mobile) | `media_upload_widget` — the user picks the file | | ||
| `create_upload_ticket` returns `upload_url` + a short-lived `token`. Upload with | ||
| multipart field `file` and `Authorization: Bearer <token>`; the stable CDN URL comes | ||
| back at `media.url`. One POST per file, ticket reusable for a batch. Then pass those | ||
| URLs to any generation tool. | ||
| ```bash | ||
| curl -X POST "<upload_url>" -H "Authorization: Bearer <token>" -F "file=@/abs/path/clip.mp3" | ||
| ``` | ||
| Do **not** fall back to `upload_media`'s `source_base64` for anything but a tiny file — | ||
| it pushes the whole file through the model's context, twice. And do not reach for | ||
| cloud credentials or a bucket of your own; the ticket is the sanctioned path. | ||
| On Windows, give `curl` a native `C:/Users/...` path — a Git Bash `/c/Users/...` path | ||
| fails to open (exit 26). | ||
| ## Routing — user says → call | ||
@@ -40,3 +68,3 @@ | ||
| |---|---| | ||
| | "Upload this file" / "host this" / "give me a public URL for this" | `upload_media` | | ||
| | "Upload this file" / "host this" / "give me a public URL for this" | `upload_media` — but see "Local files" below if it's a path on the user's disk | | ||
| | "Show my media" / "list my images/videos" / "what do I have?" | `list_media` (pass `type` / `category` / `project_id` / `folder_id` / `search`) | | ||
@@ -43,0 +71,0 @@ | "Show my favorites" / "list starred items" | `list_media` with `category=favorites` | |
@@ -33,2 +33,15 @@ # Troubleshooting | ||
| ## Every generation comes back with an unexpected colour cast | ||
| An active **Color DNA** palette is the usual cause. It is sticky and account-wide: | ||
| once activated it strict-grades every image and video generation, with no | ||
| per-call argument and nothing in the prompt to hint at it — so the user | ||
| experiences it as "all my images suddenly look brown" long after they set it. | ||
| Call `list_color_palettes` and look for `is_active: true`. Then either | ||
| `deactivate_color_palette` (clears it for everything) or pass | ||
| `skip_color_palette: true` on the single generation. Don't try to counteract the | ||
| grade by writing colours into the prompt — the palette is applied after, and the | ||
| prompt loses. | ||
| ## Checking generation status without spinning | ||
@@ -35,0 +48,0 @@ |
+14
-13
| --- | ||
| version: 0.7.1 | ||
| version: 0.7.5 | ||
| name: kolbo | ||
@@ -11,3 +11,3 @@ description: | | ||
| publishing (presentations, landing pages, dashboards), AI Docs (project | ||
| documents you author and share), and the App Builder. | ||
| documents you author and share). | ||
@@ -17,5 +17,5 @@ Use when the user wants to generate, create, make, edit, animate, or | ||
| UGC or TV-spot ads, product / lifestyle / hero shots, Amazon or marketplace | ||
| listings, presentations, landing pages, dashboards, or 'build me an app'; | ||
| listings, presentations, landing pages, or dashboards; | ||
| to reuse a character or brand (Visual DNA, brand kits); or to save a written | ||
| plan / brief / script / research doc into their Kolbo project (AI Docs). | ||
| plan / brief / script / research into a Kolbo project (AI Docs). | ||
@@ -88,3 +88,2 @@ NOT for: video editing / FFmpeg (use video-production), motion graphics | ||
| | Browse, manage, or present existing **media library** items | `references/workflows/media-library.md` | | ||
| | Use the **App Builder** (React app generation) | `references/workflows/app-builder.md` | | ||
| | Confirm **cost** or validate **resolution / aspect / duration** against model caps | `references/workflows/cost-and-validation.md` | | ||
@@ -114,11 +113,14 @@ | Hit an **auth / MCP / 429** issue | `references/workflows/troubleshooting.md` | | ||
| ### Discovery, Library, Visual DNA, Moodboards, Chat, App Builder, Publishing | ||
| ### Discovery, Library, Visual DNA, Moodboards, Chat, Publishing | ||
| | Tool | Purpose | | ||
| |------|---------| | ||
| | `list_models` / `list_voices` / `check_credits` / `get_generation_status` / `get_session_usage` | Discovery + status | | ||
| | `upload_media` / `list_media` / `get_media` / `get_media_stats` / `favorite_media` / `unfavorite_media` / `delete_media` / `restore_media` / `permanently_delete_media` / `move_media` / `bulk_*_media` / `*_media_folder` | Media library — see `workflows/media-library.md` | | ||
| | `list_models` / `list_voices` / `check_credits` / `get_generation_status` / `cancel_generation` / `get_session_usage` | Discovery + status. `list_models` with no args returns the recommended shortlist out of ~428 — pass `type` for a full category with per-model caps. `cancel_generation` stops an in-flight job and refunds what it can: use it when the user changes their mind mid-generation instead of letting it run. | | ||
| | `upload_media` / `create_upload_ticket` / `list_media` / `get_media` / `get_media_stats` / `favorite_media` / `unfavorite_media` / `delete_media` / `restore_media` / `permanently_delete_media` / `move_media` / `bulk_*_media` / `*_media_folder` | Media library — see `workflows/media-library.md`. Getting a LOCAL file in depends on where the server runs: `upload_media` with a path only works on a local (stdio) install; over a remote connector use `create_upload_ticket` and POST the file yourself. | | ||
| | `create_visual_dna` / `generate_character_sheet` / `list_visual_dnas` / `get_visual_dna` / `delete_visual_dna` / `*_visual_dna_folder` (5 folder tools) | Visual DNA (+ character sheet, character folders) — see `workflows/visual-dna.md` | | ||
| | `list_moodboards` / `get_moodboard` / `list_presets` | Style overlays | | ||
| | `search_stock_media` / `get_stock_sources` / `get_stock_categories` / `get_stock_collections` / `get_stock_asset` / `analyze_script_for_stock` / `import_stock_asset` | Stock library (free, no credits) — EXISTING photos / videos / 3D / SFX / music. For stock **music** use `search_stock_media` with `mediaType: "music"` (semantic vibe query, e.g. "uplifting corporate background") → `get_stock_asset` for downloads. The older `*_music_library` tools are deprecated adapters over this — prefer the stock tools. | | ||
| | `list_projects` / `move_session` | Projects: resolve a project NAME → the `project_id` you pass on generation/upload/doc calls; `move_session` relocates a whole session + its media when work landed in the wrong project. NOT the same as `app_builder_list_projects`. See "Projects — Where Work Lands" below. | | ||
| | `list_color_palettes` / `analyze_color_palette` / `create_color_palette` / `update_color_palette` / `delete_color_palette` / `activate_color_palette` / `deactivate_color_palette` | **Color DNA — sticky and account-wide.** At most one palette is active at a time; while it is, it strict-grades **every** image and video generation automatically, with no per-call argument. `analyze_color_palette` pulls colors out of 1-5 image URLs for free and does NOT save. `create_color_palette` defaults `is_active: true`, which activates it and deactivates any other. Per-generation opt-out: `skip_color_palette: true` on `generate_image` / `generate_image_edit` / `generate_video` / `generate_video_from_image`. | | ||
| | `list_agents` / `create_agent` / `update_agent` / `delete_agent` | Custom chat agents — reusable named personas for `chat_send_message`. The agent's `description` IS the system instruction. Resolve a name the user mentions ("use my SEO agent") to an id with `list_agents`, then pass `agent_id`. Global/preset agents are read-only; only the user's own can be updated or deleted. | | ||
| | `search_stock_media` / `get_stock_sources` / `get_stock_categories` / `get_stock_collections` / `get_stock_asset` / `analyze_script_for_stock` / `import_stock_asset` | Stock library (free, no credits) — EXISTING photos / videos / 3D / SFX / music. For stock **music** use `search_stock_media` with `mediaType: "music"` (semantic vibe query, e.g. "uplifting corporate background") → `get_stock_asset` for downloads. The older `*_music_library` tools are deprecated adapters over this — prefer the stock tools, except for the licensed-catalog tools in the next row. | | ||
| | `search_music_library` / `browse_music_library` / `get_music_library_facets` / `get_music_track_audio` / `get_music_track_lyrics` / `get_music_track_related` / `analyze_script_for_music` / `acquire_clean_music_track` / `import_music_track_to_library` | **SYNCI licensed music** — a commercially licensed catalog, not free stock. Discovery and previews are free but **watermarked**; there is no unwatermarked URL until you pay. `acquire_clean_music_track` (or `import_music_track_to_library`, which also copies it to the media library) **CHARGES CREDITS** for the clean master — confirm with the user first, and pass a stable `requestId` so a retry doesn't buy it twice. `analyze_script_for_music` turns a script into search terms for `search_music_library`. Use this family when the user needs music cleared for commercial use; use `search_stock_media` with `mediaType: "music"` when free stock will do. | | ||
| | `list_projects` / `move_session` | Projects: resolve a project NAME → the `project_id` you pass on generation/upload/doc calls; `move_session` relocates a whole session + its media when work landed in the wrong project. See "Projects — Where Work Lands" below. | | ||
| | `create_project` / `update_project` / `archive_project` / `unarchive_project` / `list_sessions` | Project lifecycle + session inventory (deletion stays in-app). Create a project when the user starts new work, then pass its id on EVERY call. | | ||
@@ -131,3 +133,2 @@ | `add_project_context` / `list_project_context` / `delete_project_context` / `get_project_profile` / `regenerate_project_profile` | Project knowledge base (RAG): feed scripts/URLs/notes; `get_project_profile` = the living brief — read it to ground work in the project | | ||
| | `chat_send_message` / `chat_list_conversations` / `chat_get_messages` | Kolbo chat with optional `media_urls` (up to 10 per call) | | ||
| | `app_builder_*` (9 tools) | Full React app generation — see `workflows/app-builder.md` | | ||
| | `publish_html_artifact` | Publish HTML / SVG / Mermaid to `sites.kolbo.ai`. Server dedupes by content hash. Strict CSP. | | ||
@@ -183,5 +184,5 @@ | ||
| 2. **No project mentioned** → omit `project_id`; the default bucket is correct. Don't ask unless intent is ambiguous. | ||
| 3. **`list_projects` ≠ `app_builder_list_projects`** — the latter scopes App Builder coding sessions only. | ||
| 4. **Work landed in the wrong project? MOVE it, never regenerate**: `move_session` relocates a whole session + all its media (works for any session type — the `session_id` from generation responses, chats, transcriptions); `move_media` / `bulk_move_media` / `move_folder_contents` relocate individual media items. | ||
| 3. **Work landed in the wrong project? MOVE it, never regenerate**: `move_session` relocates a whole session + all its media (works for any session type — the `session_id` from generation responses, chats, transcriptions); `move_media` / `bulk_move_media` / `move_folder_contents` relocate individual media items. | ||
| ## Cost Awareness — Quick Rules | ||
@@ -188,0 +189,0 @@ |
@@ -1,1 +0,1 @@ | ||
| 0.7.1 | ||
| 0.7.5 |
| # App Builder | ||
| Load this file when the user wants to build / edit / iterate on a React app via Kolbo's App Builder ("build me a todo app", "add dark mode to my app", "give me the GitHub repo"). | ||
| Use the App Builder tools to generate and iterate on full React apps from a text prompt. The backend auto-provisions a GitHub repo, Supabase database (when the app needs storage), and a live hosted deployment — all in one flow. | ||
| ## Standard Workflow | ||
| 1. **Find project ID**: `app_builder_list_projects` → pick the right project | ||
| 2. **Create session**: `app_builder_create_session` with `project_id` | ||
| 3. **Generate app**: `app_builder_generate_app` with `session_id` + `prompt` | ||
| - Fires the build in the background, polls until `build_status === "deployed"` (up to 5 min) | ||
| - Always surface the `deployment_url` to the user: **"Your app is live at: [url]"** | ||
| 4. **Iterate**: `app_builder_list_generations` → get `generation_id` → `app_builder_edit_app` with natural language instruction | ||
| No manual polling needed — `generate_app` and `edit_app` block until the build completes. | ||
| ## Local Dev Workflow | ||
| If the user wants to run the app locally or connect to the database directly: | ||
| ``` | ||
| app_builder_get_session(session_id) → returns: | ||
| github_repo_url → git clone <url> && npm install && npm run dev | ||
| supabase_url → paste into .env as NEXT_PUBLIC_SUPABASE_URL | ||
| supabase_anon_key → paste into .env as NEXT_PUBLIC_SUPABASE_ANON_KEY | ||
| ``` | ||
| ## ⚠️ Rules | ||
| - **Always confirm before `app_builder_delete_session`** — permanently deletes the GitHub repo, Supabase DB (unless user-connected), deployed files, and history. IRREVERSIBLE. | ||
| - **On build timeout** (rare): use `app_builder_get_build_status` to check manually, then continue or report. | ||
| Whitelabel works automatically — the MCP client routes App Builder calls through whitelabel API endpoints. | ||
| ## Routing examples | ||
| | User says | Sequence | | ||
| |---|---| | ||
| | "Build me a todo app" / "Make a landing page with waitlist" | `app_builder_list_projects` → `app_builder_create_session` → `app_builder_generate_app` → show `deployment_url` | | ||
| | "Add dark mode to my app" / "Add a contact form" | `app_builder_list_generations` → `app_builder_edit_app` | | ||
| | "Give me the GitHub repo" / "Supabase credentials" | `app_builder_get_session` → return `github_repo_url` + `supabase_url` + `supabase_anon_key` | |
Sorry, the diff of this file is not supported yet
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
166887545
0.23%306
-0.33%