BRUT DOCS getbrut.app ↗

Marcel, the companion

Every studio has that colleague who's seen everything — knows which film your lighting reference is from, which tool does the job cheapest, and what you tried last Tuesday. In Brut, that colleague is Marcel (named after Marcel Breuer — Bauhaus, brutalism, the Brut lineage).

His panel is open when the app starts, showing the conversation view (the Raw events toggle adds the full engineer feed); the Marcel button on the left rail (the pulse icon) hides and shows it. The panel is two things at once:

The studio timeline

A chronological diary of everything that happens in the project — runs, results, planner reasoning, errors, and your conversations. It's saved with the project (a plain text file, ledger/activity.jsonl), so it survives restarts and travels with a NAS share or a folder export. On a shared project, everyone writes to the same diary, and entries are tagged with who was signed in.

The Raw events / Chat only toggle switches between the full engineer view and just the conversation. When the panel is closed, anything Marcel says on his own — a remark, a suggestion, a failure diagnosis — badges the Marcel button on the rail, so ambient commentary never lands invisibly.

A long diary stays comfortable: the panel opens at the newest message and follows the conversation as it streams; scroll up to read history and it stops following (a ⤓ Latest button brings you back). Only the newest stretch renders by default — ⋯ Show earlier unfolds the rest in place. And the 🔎 search at the top of the panel searches the whole diary — every chat, plan, and failure back to the project's first day, not just what's on screen — with dated results.

The chat

Type at the bottom of the panel and Marcel answers — streamed live, in whatever language you write. Enter sends, Shift+Enter starts a new line, and the box grows with your message. The whole panel resizes too — drag its left edge to make Marcel as wide as you like (double-click the edge to reset). He knows Brut inside out: every model in the catalog with its real price, every node and how its ports wire, and the whole of this documentation. Ask him things like:

He recommends only from the catalog — if a price isn't pinned, he says so instead of guessing. Every model also carries a short "best for" note (hero stills, cheap iteration, native audio, reference-driven identity…), so "which model for this job?" gets a grounded answer, not a vibe.

The artistic advisor

Marcel is a seasoned artistic director, not just a manual. Ask him for direction and he answers with concrete, citable references — named photographers, films, DPs, architects, eras — never "make it more cinematic."

He carries a style library: a curated set of named looks across photography (Stoller, Shulman, Binet…), archviz conventions (the MIR mood, the clay model, the dusk money shot…), cinema (Deakins nights, Villeneuve scale, Kubrick symmetry…) and current trends — each with a description, ready-to-use prompt language, and which models render it well. Ask "give me three directions for this facade" and he'll cite them by name, with the prompt fragments to try. The library is a plain data file (engine/catalog/styles.json) — it's yours to edit: rewrite the looks, delete what you disagree with, add the studio's own.

Show him your work. The 📎 button in the chat composer lists every still currently on your canvas — selected nodes first, Reference Board pools in board order, Multi-Shot grids as their curated set. Attach a render and ask "what would you change about the light?" — Marcel actually looks at it. A few practical notes:

Marcel acts — building and running the graph

Marcel doesn't just advise; ask him to do it and he works on your actual canvas:

"Give me a 6-shot dusk study of this render."

He'll place the nodes, wire them, set the prompts and parameters, and offer to run it — you watch each step land on the canvas as he narrates. His toolkit is the same as yours: add, wire, rewire, edit, delete nodes, drop in a saved library composite (yes, the whole Cinema Team), read any node's output, search the project diary, and run nodes.

In the chat, his actions fold into a compact "🤖 N actions on the canvas" block between his messages — expand it to see every step, or ignore it and just read the conversation. When he names a node (multi_shot-21), that id is visible in the node's own title bar — click it there to copy it. And the layout isn't his problem (or yours): whatever he builds is auto-arranged into tidy columns that follow the wiring, placed where you're working — beside the nodes it connects to, or centered on your current view when it stands alone, always nudged clear of your own nodes, which are never touched. The same layout is available for any graph via the ⌗ Tidy button in the toolbar (Ctrl+Z undoes it, like everything).

Three rules keep this comfortable:

He can also save a style: when a look you've been chasing together deserves a name, he'll offer to add it to the style library — only with your go-ahead, and only citing models that exist in the catalog.

How present? The Assist slider

Marcel can also speak unprompted — and how much is entirely your call. The slider at the top of the panel has four levels; each one adds exactly one behavior to the previous, so you always know what you've turned on (and what it can cost):

Level What Marcel does
Off Nothing. The timeline stays a passive journal; Marcel never calls a model on his own — not even the quiet taste passes.
Reactive Answers when spoken to, and diagnoses failures: when a run errors, one short remark names the likely cause and the fix to try first. He knows Brut's classic traps on sight — the Gemini silent content refusal (finishReason: OTHER, almost always an input image), the first-call 429 that means billing not enabled rather than throttling, truncated replies.
Narrator + run commentary (a sentence or two when a run that actually generated something finishes — free cache replays stay silent, and re-running an already-generated graph is exactly that) and a recap when you open a project: where things stood, what finished or failed while you were away, what's still running. If nothing happened since the last recap, he doesn't spend the call at all.
Partner + unsolicited 💡 suggestions — an artistic direction, a model swap (always with real catalog prices), a next step — appearing as small cards in the timeline.

The setting is per-account, so your level doesn't change Zina's. Ambient remarks run on the cheap narrator lane and deliberately travel light — they don't carry Marcel's full Brut knowledge, just the moment's context — so a remark is a few hundred tokens: a fraction of a cent on Haiku or Gemini Flash. Every one of them is a ledgered call you can verify, like everything else. And when there's genuinely nothing worth saying, Marcel says nothing — silence is a designed outcome, not a failure.

Memory — Marcel learns your taste

Marcel keeps two plain-text memory documents, both stored on your disk and both yours to read and edit (the 🧠 Memory button in the panel):

He builds the profile as you work. In quiet moments — when you switch projects — Marcel runs a cheap pass over your recent prompts, re-rolls, and rejections and proposes a note or two: "Noticed you keep re-rolling golden-hour skies → prefers cool, overcast light." Each proposal appears in the timeline as a card you rule on — Keep (folds it into your profile, and you can Edit the wording first) or Discard. Nothing is locked in without your say-so; until you rule, it's treated as a working hypothesis.

The taste interview. The first time Marcel can run (once you've added a text key), he offers a short, entirely optional interview — what you make, references you love, pet peeves, preferred vibe. You don't have to describe your taste from a blank page: two rows of chips (drawn to golden-hour warmth, clinical minimalism, brutalist mass… / allergic to sterile renders, HDR crunch, plastic skin…) write editable sentences straight into your answers, so you react instead of invent — and every word stays yours to rewrite before anything is sent.

Then, instead of filing your answers raw, Marcel can distill them: one call on his brain lane reads what you wrote and proposes back a structured profile in his own words — palette, light, mood, composition, references, hard NOs — "here's what I think you like — correct me." The proposal appears in an editable box; fix anything that's off, then Accept to make it your taste profile (or Redo for another read, or go back and answer more). Prefer no model call at all? Save without distilling files your raw answers exactly as before. The distillation is ledgered like every Marcel call — a few cents on a flagship model.

The interview is never one-shot: relaunch it any time from Marcel's memory (🧠 → Redo the taste interview) or ⚙ Settings → Marcel. Re-running pre-selects the chips that match your current profile, and nothing is overwritten until you accept the new proposal — the rest of your profile (learned notes, hand edits) stays untouched.

Bring your own brain

Marcel runs on your own text-model key, like everything else in Brut — there is no Brut server in the conversation. Add a Gemini, OpenAI or Anthropic key and chat works; without one, the panel remains a fully working journal and the composer shows a quiet add a key link.

One OpenRouter key also works. If you hold no native text key but have an OpenRouter key, Marcel's lanes route through it — chat, ambient narration, acting, everything — visibly (the composer shows ⇄ runs via OpenRouter), at pass-through token rates, with Anthropic prompt caching intact so long conversations stay as cheap as on a native key. A native key added later takes over automatically.

Two model lanes, both pickable in ⚙ Settings → Marcel:

Both lanes carry a Reasoning dial and a Thinking switch under their pickers — full control over speed and cost, per lane. The dial (how deeply the model reasons before answering; deeper = more output tokens) is live on the GPT-5.6 family (none → xhigh, details) and on Claude Sonnet 5 / Opus 4.8 (low → max, Claude's default is high — details); on models without a declared dial the row shows not supported rather than hiding. The Thinking switch is Claude-specific: Sonnet 5 thinks adaptively by default and bills those tokens as output, so off is the faster/cheaper setting when you don't need deep deliberation. Every call's ledger row records the settings it ran with.

What it costs — honestly

Every Marcel call is ledgered like a generation: provider, model, exact token counts reported by the provider, and a dollar estimate from the catalog's per-token prices. Click the spend readout in the toolbar to open the full ledger — per-lane totals up top, then every call newest-first, Marcel's rows tagged with what kind of turn they were.

Real numbers from a measured full-day session (your ledger will show yours):

When Marcel acts, one reply may take several model rounds (think → act → look at the result → continue). Each round is its own ledger row, so an acting turn costs a few text calls rather than one — still cents; the generations he triggers are the real spend, and those sit behind the confirm.

Ambient remarks (the Assist slider) are the cheapest of all: they skip the full knowledge pack, so a failure diagnosis, run comment or recap is typically well under a cent on the narrator lane — and at Off, exactly zero, because nothing fires. Each remark is its own ledger row (look for the narrator entries in the Marcel lane), so a typical session's ambient total is a number you can read, not a promise.

Privacy

The conversation goes from your machine straight to your chosen text provider on your key, and the diary, your taste profile, and project notes never leave your disk — see Privacy. Your taste profile is per-account and private; it is never included in an export or synced anywhere. When exporting, a checkbox controls whether the journal travels: on by default for folder exports (backups), off by default for .brutpack handoffs. Project notes travel with the project either way.