Embedr Agent
Chat threads, the composer and attachments, approvals, the activity timeline, steering, checkpoints, notifications and Voice Mode.
Embedr Agent works inside your project: it reads and edits files, builds and flashes firmware, works on Zener sources, schematics and boards, reads datasheets and drives the mechanical workspace. You talk to it in the chat panel of a project.
Where the chat lives
The title bar has a layout switch:
| Layout | What you see |
|---|---|
| Agent layout (Chat in center) | A Threads sidebar on the left, the chat in the middle |
| IDE layout (Editor in center) | The editor in the middle, the chat in a side panel with New chat and a history button in its header |
On an empty chat Embedr offers three starters: Review project, Find risks and gaps and Suggest next steps.
Chat threads
Each project has its own threads. Keep one thread per task ("bring up the BME280", "fix upload on the S3 board", "route the power section").
| Action | How |
|---|---|
| Start a thread | New chat in the Threads sidebar or the chat header |
| Switch threads | Click a thread in the sidebar, or the history button in the chat header |
| Rename | Double-click the title (sidebar row or chat header), type, press Enter. Esc cancels |
| Find a thread | Search icon in the Threads header, then Filter threads... |
| Delete | Hover a thread and click the trash icon |
| Copy the chat file's path | Hover a thread and click the copy icon |
Embedr names a new thread from your first message and replaces the placeholder name with a generated one shortly after. A name you type yourself always wins.
The sidebar shows the newest 15 threads; click N more for the rest. Row markers:
- a moving dotted loader: Agent is working...
- a green dot: Agent finished since you last looked
- a small number: messages waiting in that thread's queue
- an indented row with a dotted badge: a helper thread under the thread that started it
In the desktop app, chats are stored outside the project folder, under ~/EmbedrProjects/.embedr/<project-name>/chats/, so they are not committed with your code. In the browser they are stored with the web project.
The composer
The composer placeholder reads "Ask about your project… @ files · paste images".
| Key | Action |
|---|---|
| Enter | Send (or queue, while the agent is working) |
| Shift+Enter | New line |
| Shift+Tab | Turn Plan Mode on or off |
| Esc | Closes the @ list or a menu. It never clears your draft |
A draft stays with its thread when you switch away and back.
Mention files and datasheets
Type @ to open a list of project files and indexed datasheets. Keep typing to filter (up to 20 matches), use the arrow keys, and press Enter or Tab to pick one. The file is attached as a chip and @name stays in your text.
Attachments
Attach with the paperclip, by dropping files on the chat, or by pasting. Click any tile to preview it; the preview has a remove button.
| What you attach | What happens |
|---|---|
| Images (PNG, JPEG, WebP, GIF) | Sent as images. Large images are scaled to 2048 px on the long edge |
| BMP, SVG pasted as an image, AVIF, ICO, APNG | Converted to PNG or JPEG first |
| HEIC, HEIF, TIFF | Refused: "HEIC images aren't supported. Export as PNG or JPEG and attach again." |
Source code, KiCad files (.kicad_sch, .kicad_pcb, .kicad_sym, .kicad_mod…), Zener .zen, Gerbers and drill files, SPICE netlists, Markdown, JSON, YAML, CSV, logs, Intel HEX, STEP |
Read as text and included in the message |
| Unknown file types | Accepted if the content looks like text |
Altium .SchDoc, .PcbDoc, .PrjPcb, .OutJob, .SchLib, .PcbLib, .IntLib |
Turned into a text summary: components, nets, layer stack and rules |
| Processed as a datasheet and attached as one. Only inside a project | |
Archives, executables, firmware binaries (.bin, .elf, .uf2), STL, 3MF, GLB, Office documents, media, fonts |
Refused: ".zip is a binary format, so its contents can't be read as text." |
Limits per message:
| Limit | Value |
|---|---|
| Attachments | 24 (extra files are skipped with "Too many attachments") |
| Images | 8 |
| All images together | about 18 MB after conversion |
| Single image before conversion | 40 MB |
| Text read from one file | 256 KB; longer files are cut and the agent is told to read the rest from the project |
| Altium file | 80 MB |
Pasting 2,500 characters or 40 lines or more creates a Pasted text attachment instead of filling the box. Open it and click Insert as text if you want it inline.
The ring at the right of the composer shows how much of the model's context the thread uses, for example "120K of 272K tokens · 56% left". If a long draft will not fit, the tooltip says so; remove attachments or start a new chat.
Send selections and output to chat
Select text and click the floating Add to Chat button in:
- the code editor,
- a terminal tab,
- the build Output panel,
- the Serial Monitor.
When a build fails, the Output panel shows Ask agent to fix. Board, schematic and 3D views have Add to chat for selected components (press A on a selected 3D component). The mechanical workspace adds part notes as chips; see Mechanical design.
Agent preferences
The sliders button next to the model picker opens the preferences menu. Each change is announced to the agent in the thread.
| Section | Option | Effect |
|---|---|---|
| Agent behavior | Auto-flash | After a successful build, flash the selected device; asks you to pick a port if none is safe |
| Auto-debug | When build, flash, runtime or serial output shows a problem, inspect it, fix, and re-run checks | |
| Auto-review | Before finishing code or hardware changes, review the changes and call out remaining risks | |
| Interface | Follow agent | Switch tabs and panels to what the agent is doing (for example the Output after a compile) |
| Terminal approvals (desktop) | Default permissions, Low-risk auto approve, Full access | How terminal commands are approved; see below |
When Full access is on, the button shows a warning shield and the label "Full access".
Approvals
Some actions stop and ask you in the composer area before they run.
| Asks for approval | Notes |
|---|---|
| Terminal commands (desktop) | Depends on the Terminal approvals mode and Settings → Command Approval |
| The agent typing into one of your terminal sessions | Always asks |
| PCB Auto Place and PCB Auto Layout | Always asks; needs a paid plan, otherwise the card offers View plans |
| Exporting PCB artifacts (desktop) | Always asks |
The card shows the command or action, the risk reasons (when Show Risk Analysis is on) and these choices:
| Choice | Meaning |
|---|---|
| Allow once | Run it now |
| Always allow | Run it now and auto-approve this category from now on. Not offered for destructive commands |
| Enable full access | Run it and stop asking for any terminal command |
| Decline | Do not run it; the agent is told |
Click Confirm to answer. Terminal modes:
- Default permissions: read-only, build and version-control commands run without asking; everything else asks.
- Low-risk auto approve: also runs commands that do not modify or delete files.
- Full access: no terminal prompts. The same as YOLO Mode in Settings.
If an approval comes from a thread or project you are not looking at, a popup appears; minimize it to a pill in the title bar. In the browser, commands run in a cloud sandbox without prompts ("Cloud sandbox: commands run without approval prompts."); PCB automation still asks.
The activity timeline
The agent's tool calls are grouped between its messages. Each group is collapsed and summarized, for example "Read 3 files, ran 10 commands". Expand a group to see each call; expand a call for its details (the full command, diffs, output). Images produced by the tools show as thumbnails at the right of the group and open in a preview.
While a run is active, the latest group shimmers with the current activity ("Searching project files…", "Thinking…", "Compacting context…", "Waiting for you"). The run's duration appears once, at the end:
- Worked for 4m 12s under the final reply,
- Working for… while it runs,
- Failed after… or Cancelled after… when it ends early.
Time spent waiting for your answers or approvals is not counted.
When a long thread nears the context limit, Embedr summarizes earlier turns automatically. A divider marks it: "Compacting context..." then "Context automatically compacted".
Reply rows also have copy, Helpful? thumbs (sends feedback on that reply), and reasoning summaries where the model provides them.
While the agent is working
You can keep typing. The send button becomes Queue message, and queued messages stack above the composer.
| Control | Effect |
|---|---|
| Steer | Desktop: the message joins the running run before its next step; the row shows Joins next step. Browser: the current run stops and your message is sent next |
| Remove (x) | Drop the queued message |
| Send next | Shown when nothing is running; sends the first queued message |
| Square stop button | Cancel Generation |
Queued messages are sent in order when a run finishes normally. After a cancel or an error they wait for Send next.
If a run stops with Agent Paused, click Continue to let it keep going.
Questions from the agent
When the agent needs a decision only you can make, it asks one to four questions in the composer area instead of guessing. Pick an option, choose Something else and type, or choose You decide to let it pick a default and record it as an assumption. See Plan Mode for the full flow.
Checkpoints and undo
With Enable Chat Checkpoints on (Settings → General), Embedr snapshots the project before each message you send.
- Restore checkpoint and edit message (on your earlier messages): reverts project files to that point, removes everything after it, and puts the message back in the composer to edit.
- Delete from here (on messages without a checkpoint): removes the message and everything after it from the conversation. Files are not touched.
Both ask for confirmation. In the mechanical workspace, Cmd+Z can also take back the agent's last turn; see Mechanical design.
Notifications
Embedr notifies you when a run finishes, fails, or needs an answer or approval, if Embedr is in the background or you are looking at another thread. The first time you hand work to the agent from the Home screen or click Implement this spec, a Know when it's done prompt above the composer offers Turn on. On macOS, if no notification appears, allow Embedr in System Settings → Notifications. In the browser you can also choose email.
The bell in the title bar lists recent notifications; click one to open its thread. Change what notifies you in Settings → Notifications.
Voice Mode
Voice Mode is in the desktop app on Hobby and Pro. Click the microphone in the composer (Start voice mode). Talk normally; the orb shows the state: Listening, Thinking…, Working with Embedr Agent…, Speaking, or Approval needed in Embedr. Voice replies appear in the thread marked Embedr Voice.
- Click the orb while it speaks to stop the reply.
- The left button mutes the microphone; the x closes voice mode.
- Minimize the main window and a floating orb stays on top; click it to return to Embedr.
When something goes wrong
| Message | What to do |
|---|---|
| Reconnect ChatGPT | Reconnect your ChatGPT account in Settings → AI Accounts, then retry |
| OpenCode balance required | Add balance to your OpenCode account or pick another model |
| Model Usage Limit / Provider Rate Limit | Wait for the reset, add usage, or switch models; see Models |
| "This conversation has become too long. Please start a new chat." | Start a new thread and reference the files or spec you need |
| Reauthenticate to continue | Sign in again |
Prompt examples
Name the outcome, the limits, and the check.
Firmware:
This ESP32-S3 project should read the BME280 over I2C every 2 s and print temperature, humidity and pressure at 115200 baud. Inspect the current code, install the library if it is missing, build, and leave the Wi-Fi code alone.
@main.cpp The device resets when the motor starts. Read the serial log I added and tell me whether this is a brownout or a watchdog reset before changing anything.
Hardware:
Add a USB-C input with a 3.3 V LDO to the board. Use the AP2112K datasheet I imported for the capacitor values, keep the existing I2C pinout, then build the Zener source and show me the ERC result.
Route the current board, then list any unrouted nets and the DRC errors that remain.
Mechanical:
Design a snap-fit enclosure for this board with a 2 mm wall, an opening for the USB-C connector, and four M2.5 standoffs at the mounting holes. Show me a section view when it builds.
