🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@kolbo/kolbo-code-linux-arm64

Package Overview
Dependencies
Maintainers
1
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@kolbo/kolbo-code-linux-arm64 - npm Package Compare versions

Comparing version
2.4.3
to
2.4.4
+1
-1
package.json
{
"name": "@kolbo/kolbo-code-linux-arm64",
"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 @@

---
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