Core workflows
Artifacts
The agent can put something you can look at or use (a page, a calculator, a chart, a diagram, a document) in a panel as an artifact: the side panel in Chat Mode, an Artifact tab in Code Mode. An artifact has an id, keeps every version, and is saved with the chat or session.
How an artifact appears
When a reply creates an artifact, the reply shows a card (title, type, size) where the code would have been. View source shows the raw text; Open shows it in the side panel. While the reply is still being written the card says Writing…, and nothing runs until it is finished.
Ask for a change ("make the button blue") and the agent sends a complete new version under the same id. The panel stays on that artifact and the version strip (v1 · v2 · v3) lets you go back. No folder is needed: the agent does not ask which files to create or try to save one, and if it looks something up on the way (a web page, an API), the new version is still the one saved. If you regenerate a reply, its version goes away and the next one gets a new number, so a number is not reused while the artifact still has other versions. The exception: if the regenerated reply made the artifact's only version, the artifact itself goes away, and the next one under that id starts again at v1.
Plain code blocks without the artifact marker still appear in the panel as snippets, as before. They are not saved as artifacts.
Artifacts in Code Mode
Code Mode replies can carry artifacts too. Ask for an artifact ("make me an HTML artifact of a budget dashboard", "show it as an artifact") and the reply shows a card in the agent panel. Open shows it in an Artifact tab in the editor area, with the same versions, status, settings and isolation as Chat Mode; the tab shows only the open session's artifacts and closes when you switch to Chat Mode. Any other request, including "show me a mock up of ..." or "make a mockup for ..." without the word artifact, is ordinary Code Mode work and the agent writes files in your project as before. An artifact is never written to the project on its own: ask the agent to save it as a file.
What runs, and what cannot
HTML artifacts run in their own isolated view, separate from the app: their own process, no access to the app, your files, or the API key, and no network at all. Every request to anything other than the artifact itself is refused, links and redirects cannot leave it, pop-ups, downloads, camera, microphone, notifications and devices are refused, and WebRTC is blocked. Put everything the artifact needs (scripts, styles, data) inside it; a CDN link will not load. document.open(), and document.write() once the page has finished loading, throw an error inside an artifact.
React artifacts do not run yet. They are shown as code until the bundled React runtime ships. SVG, Mermaid diagrams, Markdown and code are shown statically. Outside the desktop app (the browser preview), everything is shown statically.
The status line
The status under the version strip says only what was observed:
| Status | Meaning |
|---|---|
| Loading | The view was started and has not finished loading yet. |
| Loaded | The page finished loading and nothing has thrown so far. It does not mean the artifact does what you asked. |
| Threw: … | A script error, with its first line. It replaces Loaded whenever an error happens. Ask Bodega to fix puts the error in the message box for you to send. Also shown when it did not load in 10 seconds, stopped responding, or crashed. |
| Blocked: tried to reach … | The artifact tried to load or open something outside itself; it was refused. |
| Static | Nothing runs (SVG, diagram, table, code, Markdown, React for now, or Static only mode). |
There is no "works" or "safe" label: nothing checks that an artifact does what was asked.
Settings and air-gap
Settings → General → Profile, under Chat artifacts (it applies to Chat Mode and Code Mode): On (default) runs HTML artifacts as described above; Static only never runs code; Off stops telling the agent about artifacts, and replies show plain code blocks. This setting is never read from a project's config file. The app checks it again before it runs anything, so Static only and Off hold even if the panel is out of date, and nothing runs until your settings have loaded.
With air-gap on the agent is not told about artifacts (an artifact you already have still opens, with the same no-network isolation). While air-gap is on, or the project is in a vault, a refused request from an artifact is counted in the air-gap report: once per address for each time the artifact is open. An artifact that keeps retrying is still refused every time, but each address is counted once; after 20 different addresses the rest are refused and only counted. There are no per-artifact network permissions yet.
Downloading an artifact
Download saves the version on screen as a file named after its id. For HTML the panel warns: opening this file in a browser runs it with full network access. The isolation above only applies inside Bodega.
Side chats, the CLI and phones
Artifacts are saved only in normal chats. The CLI and Bodega Remote do not run artifacts; the saved versions are readable through GET /api/sessions/:id/artifacts and GET /api/artifacts/:id/versions/:n, and bodega artifacts commands are planned, not shipped.
This page mirrors the in-app docs hub for app version 1.0.0-beta.51. Found something unclear or out of date? Tell us on Discord. New here? Download the free beta and follow along.