Create or Inspect a Slide
create_slideCreate one PowerPoint slide (.pptx, native, editable) from a structured intent in ONE call: pick a form from the menu and put your content in the typed fields (placed on the slide as given), or pass a brief and let the server route it. Fields tagged (per-form) bind only where the form has that slot — ignored-with-warning elsewhere; see each form's binds in browse_catalog.
BLOCKED ($0)? If an error has can_autofix:true, merge its patch into the args at patch_target. Unchanged retries repeat the block. New form: browse_catalog(type=schema) first.
FORM MENU: agenda_list: an ordered list of sections/topics or learning objectives to walk through bar_rank_chart: bars comparing magnitudes across categories calendar_grid: events on a real calendar - week planner (day x hour) or month grid with event chips (data.events) card_grid: several equal, unordered peer blocks (features, options, pillars, a concept's defined parts, rules/guidelines/common mistakes) case_story: one named story told as evidence: challenge, action, measured result comparison_matrix: options x criteria grid: data.columns x data.rows cycle_flow: a closed loop of ordered stages where the last feeds the first (recurring process) data_table: a plain factual table of records by fields editorial_split: two side-by-side halves: contrast (before/after, problem/solution) or copy/numbered steps beside a picture (image_src) exercise_prompt: an exercise/practice/discussion prompt: instruction + hints; optional problem items with blank answer boxes funnel: a quantity narrowing through ordered stages gantt_plan: tasks as bars across named periods on a schedule grid gauge_score: one score on a dial against a scale hero_statement: a statement slide: covers (typographic/image/exec), from->to/thesis-quote transitions, statement/contact/next-steps closings; supporting points -> takeaway_stack, contacts -> data.contacts, next steps -> data.next_steps hub_spoke: one central element with several elements connected around it image_story: a picture shown WHOLE (uncropped) + prose, or a 1-6 picture/placeholder gallery (data.images); points beside a picture -> editorial_split kpi_metrics: a metrics dashboard: headline metric cards; data.sections (Highlights/Risks/Asks) makes it an exec summary / QBR snapshot layer_stack: stacked layers where higher sits on, and depends on, lower linear_flow: ordered process stages read left to right (or inputs to process to outputs) maturity_staircase: ascending levels climbing to a higher state nested_magnitude: nested containment - each level contains the next org_structure: a reporting hierarchy / org tree position_map: items placed by two axes - named 2x2 cells or scatter positions pyramid_hierarchy: a triangle of stacked tiers, foundation to apex ramp_curve: a continuous rising wedge split into phases - effort or value accumulating over time section_divider: a section-break: big section number + title; blocks = agenda progress chips (emphasis=primary = current) segment_wheel: a wheel of equal segments around a center - peer categories in the round (composition, not flow) status_dashboard: initiatives/workstreams tracked by status, owner, progress strategic_fork: one origin splitting into two mutually exclusive paths, one recommended swimlane_flow: actor/function lanes by phases, task cells, handoffs across lanes swot: the four-quadrant strengths / weaknesses / opportunities / threats grid system_flow_map: architecture/system components: panels with internals (edges optional) or nodes wired by directed arrows takeaway_stack: a title plus a few supporting points, each with one line of detail (executive summary, key findings); optional closing ask timeline_roadmap: milestones/phases laid out along a time axis trend_chart: one or more series plotted over time value_chain: support bands over primary activity columns flowing into a goal arrowhead (data.support = the bands) visual_showcase: one dominant screenshot/image with numbered callouts pointing into it waterfall_bridge: a start value bridged to an end value by plus/minus contributions
Exact per-form data shapes: browse_catalog(type=schema, family=) — the generated,always-current JSON Schema + a worked example. (List-shaped forms take blocks: [{"label","sub","detail":[str],"emphasis"}]; structured forms take typed data.)
Escape modes: mode=code (caller-supplied python-pptx in sandbox, $0.05 — use for forms the menu cannot express: calendars, custom diagrams); mode=status (poll a job, free). Image-led asks (photo covers, full-bleed visuals): hero_statement + image_prompt (+$0.05) or image_src.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Python code defining build(prs). Canvas 13.33×7.5", coords in inches. Pre-imported: Presentation, Inches, Pt, Emu, RGBColor, MSO_ANCHOR, PP_ALIGN. Helpers: add_text_box(slide, left, top, w, h, text, font_size=12, bold=False, color=None), add_box(slide, left, top, w, h, fill_color=None, line_color=None, corner_radius=0.05), add_icon, add_image (src = path or https://); theme_color(name) → RGBColor. add_widget(slide, name, x, y, w, h, params=|content=, theme=THEME) draws board-grade SSG widgets/charts (cards, waterfall, gantt, funnel…) — names via `browse_catalog(type=widgets)`. Use font_size=, not size=; use fill_color=, not fill=. When chrome is supplied, use `build(prs, slide)` — chrome is pre-rendered. Helper signatures: `browse_catalog(type=helpers)`. | |
| data | No | family-specific payload — see the documented shapes | |
| date | No | date callout (per-form). | |
| form | No | the form menu pick (see description) — the routing field | |
| mode | No | Default: structured intent / brief. safe = validate-then-render in ONE call (renders + bills only if faithful; else $0 invalid report with the fix — recommended, no dry_run round-trip). code = python-pptx escape. status = poll. | |
| name | No | ||
| wait | No | AI-image slides block ~10-15s; `false` returns a job_id to poll, not block (mode=brief). | |
| brief | No | prose fallback / extra context for fills | |
| blocks | No | list: [{"label","sub","detail":[str],"emphasis","icon":lucide-name,"metric":{value,label}}] | |
| detail | No | Response verbosity. Default `compact`: status, form/variant, fidelity (verbatim|mixed|ai_completed), warnings[]/errors[] (only when present), urls, cost. `full` adds a debug object (engine internals, verify events, latency buckets). | |
| job_id | No | Previous job ID (for mode=status, or mode=code patching) | |
| metric | No | ||
| verify | No | mode=code tier. Default `lint`: static geometry linter (overlap/off-canvas/zero-size) + composer content validators — no LLM. `lint+vlm` adds a VLM second-look (~+3s) and makes a blank/contentless render a $0 error, not a billed warning. `off` skips checks. | |
| caution | No | one-line risk / caveat callout (per-form). | |
| context | No | one-line subtitle/standfirst | |
| dry_run | No | Free pre-commit check (intent or mode=code), cost:0, no PPTX: status + warnings/errors, plus fidelity_forecast (verbatim|mixed|ai_completed|would_reject) and which fields bind vs get authored. Fix errors, re-call with dry_run=false to render. | |
| imagery | No | Cover/section-divider imagery: photo (default — curated stock photo, half-bleed), wash (abstract color wash), off (typographic only). Content slides are never photo-decorated. | |
| logo_id | No | Optional brand logo (from upload_asset purpose=logo) drawn as chrome on content slides; covers/section breaks stay clean. | |
| styling | No | Topical design on default themes (default on; the note names it): designed cover + a subject palette (from imagery_tag, or the brief). clean = neutral. Pins never take it. | |
| subject | No | central entity for forms that have one — hub label, org root, section #, fork origin, media label (per-form). | |
| variant | No | pin a specific variant within the form (list them via browse_catalog). Unknown variant -> rejected ($0) with the valid list; set allow_variant_fallback to render the family default instead. | |
| headline | No | the assertion-style slide title | |
| language | No | Target language (default: en) | |
| takeaway | No | optional verdict band (per-form). Put the so-what in the headline; add only for a verdict the title can't carry — not every slide. | |
| theme_id | No | Optional theme id from browse_catalog(type=themes). Omit for Default (slideforge_standard). | |
| direction | No | rtl typesets AND mirrors the slide right-to-left (Arabic/Hebrew). Never inferred — pass it. | |
| highlight | No | one-line emphasis callout (per-form). | |
| image_src | No | https URL | asset:<id> for image-bearing forms | |
| imagery_tag | No | Subject/industry: steers cover/section photos AND the topical palette. Omit = general; `education` = teaching. | |
| min_font_pt | No | Binding type floor for prose (exhibit furniture has its own). Type grows to meet it; content that can't fit is a $0 min_font_not_met naming the size needed. Typical: 12. | |
| source_note | No | source / footnote line (per-form). | |
| force_render | No | On completed_with_errors, pptx_url is null (broken slide). Set true to get it anyway. No cost/status effect. | |
| image_prompt | No | generate an image when no image_src (+$0.05) | |
| replacements | No | String replacements on loaded code [{old, new}] (for mode=code with job_id) | |
| variant_policy | No | Routed-variant maturity policy: production_safe = if the ROUTED variant is draft/beta, render the family's demo-safe sibling instead (warning names both). Never overrides an explicit variant=. Default best_semantic_match. | |
| include_preview | No | Inline-preview PAYLOAD only (not execution). Default: default (768px). none omits the inline image and returns just the URLs — it does NOT change sync/async. Use `wait` to control execution. | |
| quality_profile | No | Thresholds layout.presentation_ready is judged against (executive strictest). Measurement only — never blocks a render or changes cost. | |
| allow_truncation | No | More items than the form holds blocks (it would drop your data); the response names the dropped count + a suggested_split. true renders the capacity subset (fidelity=verbatim_truncated). Default false. | |
| form_description | No | ||
| allow_fabrication | No | Brief mode only: a bare brief on a DATA form (kpi/funnel/comparison/…) returns would_fabricate at $0 rather than INVENT numbers. Send typed fields for verbatim, or true to let the brief author them (fidelity=ai_completed). Default false. | |
| allow_low_confidence | No | Brief routing only: by default a brief that doesn't match a form clearly returns status=needs_confirmation + candidates at cost:0 (no guessed render). Set true to render the top guess and bill it. Default false. | |
| allow_variant_fallback | No | If the pinned variant is unknown, render the form's default variant (with a warning) instead of rejecting. Default false. |