Adom Desktop
Public Made by Adomby adom
Installs the adom-desktop CLI and its Claude skills INTO A CLOUD CONTAINER so an AI assistant there can understand and drive Adom Desktop over the relay. This is the container side, NOT the app itself. The Adom Desktop app is the signed Windows installer under Download below: run THAT on the PC you want the AI to control. Rule of thumb: pkg install here (in your Linux container), Download there (on your Windows PC). Once installed, the AI can drive file transfer, screenshots, notifications, KiCa
Fusion 360 bridge verbs
Drive Fusion 360: CAD export, cloud docs, EAGLE electronics, manufacturing, UI.
Part of the Adom Desktop verb reference. Invoke as adom-desktop <verb> '<json>'.
Note: Two-tier architecture: bridge (port 8773) handles launch/detection; AdomBridge add-in (port 8774) handles exports/queries inside Fusion.
Workflow: fusion_start -> fusion_open_cloud_file or fusion_open_board -> work -> fusion_close
cad_3d
fusion_export_3mf
Export active design as 3MF
Args:
outputPath— required
Prerequisite: Active 3D design
fusion_export_dwg
Export active design as DWG
Args:
outputPath— required
Note: Not available via API (dialog only). Use fusion_export_step or fusion_export_dxf instead.
Prerequisite: Active 3D design
fusion_export_dxf
Export active design as DXF
Args:
outputPath— required
Note: Not available via API (dialog only). Use fusion_export_step or fusion_export_iges instead.
Prerequisite: Active 3D design
fusion_export_f3d
Export active design as Fusion 360 archive (.f3d)
Args:
outputPath— required
Note: Native Fusion format — preserves parametric features, history, component references
Prerequisite: Active 3D design
fusion_export_fbx
Export active design as FBX
Args:
outputPath— required
Note: FBX only — no fallback. Not available in current Fusion builds. Use fusion_export_usdz or fusion_export_step instead.
Prerequisite: Active 3D design
fusion_export_iges
Export active design as IGES (.igs)
Args:
outputPath— required
Note: Legacy CAD interchange. STEP is preferred for modern workflows.
Prerequisite: Active 3D design
fusion_export_obj
Export active design as OBJ
Args:
outputPath— required
Note: Not available via API (dialog only). Use fusion_export_stl or fusion_export_usdz instead.
Prerequisite: Active 3D design
fusion_export_sat
Export active design as SAT (.sat, ACIS solid model)
Args:
outputPath— required
Note: ACIS kernel format — opens in SolidWorks, SpaceClaim.
Prerequisite: Active 3D design
fusion_export_skp
Export active design as SKP (SketchUp)
Args:
outputPath— required
Note: Not available via API (dialog only). Use fusion_export_step or fusion_export_stl instead.
Prerequisite: Active 3D design
fusion_export_step
Export active design as STEP
Args:
outputPath— required
Prerequisite: Active 3D design (not Electronics)
fusion_export_stl
Export active design as STL
Args:
outputPath— required
Prerequisite: Active 3D design
fusion_export_usdz
Export active design as USDZ (best for digital twins + GLB)
Args:
outputPath— required
Note: Preserves component hierarchy, PBR materials, named nodes. Ideal for Blender→GLB or direct iOS/macOS AR viewing.
Prerequisite: Active 3D design
fusion_get_design_info
Get active design metadata (bodies, components)
Prerequisite: Active 3D design
fusion_get_parameters
List user parameters from active design
fusion_import_step
Import STEP/STL/IGES/SAT/OBJ/F3D file into Fusion
Args:
filePath— required Windows path
fusion_set_parameter
Modify a user parameter
Args:
name— requiredvalue— required
fusion_take_screenshot
Capture Fusion viewport as PNG with camera orientation control
Args:
height— optional (default 1080)orientation— optional: home, front, back, top, bottom, left, rightoutputPath— requiredwidth— optional (default 1920)
Note: Uses Fusion's render API (Capture Image) — not a window screenshot. Supports all standard views for product images/icons.
cloud
fusion_check_recovery
Check if a cloud file has crash recovery data
Args:
fileName— requiredfolderPath— optionalprojectName— optional
Note: Check BEFORE opening files to avoid blocking recovery dialog
fusion_create_cloud_folder
Create folder (idempotent)
Args:
folderName— requiredparentPath— optionalprojectName— optional
fusion_delete_cloud_file
Delete a cloud file (must not be open)
Args:
fileName— requiredfolderPath— optionalprojectName— optional
fusion_export_cloud_file
Export active document to local file (step/stl/f3d/iges/sat/smt)
Args:
format— optional (default: step)outputPath— required
fusion_list_cloud_files
List files and subfolders in a cloud project/folder
Args:
folderPath— optionalprojectName— optional
fusion_list_cloud_projects
List all cloud projects in user's hub
fusion_open_cloud_file
Open a cloud file by name. STOPS if recovery exists — you must specify recovery='open' or recovery='discard'
Args:
fileName— requiredfolderPath— optionalprojectName— optionalrecovery— optional: open|discard
fusion_save_to_cloud
Save active document to Fusion cloud
Args:
description— optionalfolderPath— optionalname— requiredprojectName— optional
fusion_search_cloud_files
Search a cloud project / subfolder by file-name substring. Returns matches + a detailed scope analysis. Use this for targeted lookups; for exhaustive whole-cloud walks prefer fusion_walk_cloud_tree.
Args:
folderPath— optional starting subfolder (default: project root). NARROW THE SCOPE HERE — naming the right subfolder can reduce search time 10-50x.folderTimeout— optional int seconds per-folder cloud-API timeout (default 30)maxDepth— optional int (default 2, no upper cap)maxFolders— optional int (default 10, no upper cap). For exhaustive 100+ folder searches consider walk_cloud_tree.maxResults— optional int (default 20, no upper cap)projectName— optional (defaults to active project)query— required case-insensitive substring of the file namerecursive— optional bool (default false). false = root folder only (fast); true = descend into subfolders.searchTimeout— optional int seconds overall wall-clock timeout (default 120). If you set this >180, also pass timeout: to the bridge so the HTTP waiter doesn't give up first.
Returns: data{files[], totalFound, foldersSearched, foldersSkipped, filesSkipped, searchComplete, truncated, folderLimitReached, searchTimedOut, elapsedSeconds, costAnalysis{foldersPerSecond, estimatedSecondsPer100Folders}, hint}
Note: All defenses (per-folder timeout, doEvents, per-file try/except, watchdog) make hard caps unnecessary. Defaults are conservative; raise maxFolders/maxDepth/maxResults for thorough searches.
fusion_walk_cloud_tree
Walk a cloud folder tree iteratively (BFS) and return a flat list of folders + files with full paths.
Args:
extensions— optional list of extensions to include, e.g. ["f3d","fprj"]folderPath— optional starting folder (defaults to root)includeFiles— optional bool (default true) — set false for folder-only treemaxDepth— optional int (default 10)maxFolders— optional int (default 500, truncates if exceeded)nameContains— optional case-insensitive substring filter on file namesprojectName— optional (defaults to active)
Returns: folders[], files[] (each with path), stats{foldersVisited, filesFound, truncated}
Note: Single add-in call does the entire walk. No sleeps, no batching. For targeted finds use nameContains; for exports use extensions.
electronics
fusion_board_info
Get structured board data: components, nets, traces, DRC violations
Note: Much richer than a screenshot — exact coordinates and connectivity
Prerequisite: Board open in PCB Editor
fusion_electron_run
Execute EAGLE command (WINDOW FIT, DISPLAY ALL, RATSNEST, DRC, etc.)
Args:
command— required EAGLE command string
Returns: activeWorkspace, fusionOperations[] (diff of internal log), _hint
Note: Fire-and-forget: never returns output. Use fusion_board_info for data. Full command reference with safe/blocking split: skills/eagle-commands.md (ships next to this CLI binary). Avoid blocking commands: WRITE, ADD, SHOW, MOVE, CHANGE, EDIT.
fusion_execute_text_command
Low-level Fusion app.executeTextCommand() access
Args:
command— required Fusion text command
fusion_export_eagle_source
Export active electronics document as plain EAGLE .sch or .brd XML — extracts from Fusion's .fsch/.fbrd ZIP container
Args:
outputPath— required — full path ending in .sch or .brd
Note: Produces valid EAGLE XML (<?xml>) parseable by standalone EAGLE, KiCad import, or any XML tool. For Fusion-native format use fusion_export_source instead.
Prerequisite: MUST have correct editor active: PCB Editor / Board Layout for .brd, Schematic Editor for .sch
fusion_export_lbr
Export library as .scr script (no 3D refs)
Args:
outputPath— optional
fusion_export_source
Export active electronics document as .fsch (schematic), .fbrd (board), or .flbr (library) source file
Args:
outputPath— required — full path with extension (.fsch, .fbrd, or .flbr)
Note: Always export .fbrd FIRST (from board view), then switch to schematic for .fsch. If file not created, wrong workspace is active — screenshot to check.
Prerequisite: MUST have correct editor active: Board Layout for .fbrd, Schematic Editor for .fsch
fusion_import_electronics
Import Fusion-native .fsch/.fbrd/.flbr file as new local electronics project
Args:
filePath— required Windows path to .fsch, .fbrd, or .flbr file
Note: Creates a NEW local document via Document.newDesignFromLocal. Use fusion_save_to_cloud to persist afterward. For legacy EAGLE files use fusion_open_schematic (.sch), fusion_open_board (.brd), or fusion_open_lbr (.lbr).
fusion_list_text_commands
List available EAGLE text commands in current context
fusion_open_board
Open .brd in Board Layout editor
Args:
filePath— required
fusion_open_electronics
Check if Electronics workspace is active
fusion_open_lbr
Open .lbr library in Electronics Library editor
Args:
filePath— required
fusion_open_schematic
Open .sch in Schematic Editor
Args:
filePath— required
fusion_show_2d_board
Switch back to 2D board layout from 3D view
Note: EAGLE commands only work in 2D view
fusion_show_3d_board
Switch to 3D PCB view (board needs outline on layer 20)
Prerequisite: Board must be open in PCB Editor
lifecycle
fusion_activate_document
Switch to an open document tab by name or type
Args:
documentType— optional: Electronics|PCB|FusionDesign|Drawingname— optional substring match
fusion_close
Close Fusion 360 gracefully
fusion_close_all_documents
Close all open documents
Args:
saveChanges— optional bool (default: false)
Note: Call before force-killing Fusion to prevent recovery files
fusion_close_document
Close a document without save dialog (avoids modal blocking)
Args:
name— optional (default: active)save— optional bool (default: false)
fusion_close_window
Close a specific Fusion dialog window by sending WM_CLOSE (equivalent to clicking its X button). Works on dialogs that Escape doesn't close — e.g. 'Recovered Documents'.
Args:
hwnd— required — HWND from fusion_window_info or fusion_dismiss_blocking_dialogs remaining[]
Note: Does NOT force-kill — the dialog can still prompt for confirmation. Use when fusion_dismiss_blocking_dialogs reports remaining dialogs that Escape couldn't clear.
fusion_dismiss_blocking_dialogs
First-class blocking-dialog killer. Enumerates all Fusion Qt windows, matches them against a known list of blocking/picker patterns ('What do you want to design?', error toasts, recovery prompts, etc.), and sends Escape to each offending HWND until the add-in main thread reports responsive. Whenever any fusion_* command returns errorCode 'fusion_addin_not_responding', call this FIRST before retrying.
Args:
extraPatterns— optional array of case-insensitive title substrings to also treat as blockingmaxAttempts— optional int (default 5) — retry loop cap
Returns: dismissed[{hwnd,title,pattern}], remaining[], mainThreadResponsive, attempts
Note: Idempotent. Safe to call any time. Returns immediately with empty dismissed[] when no blocking dialogs are present.
fusion_document_info
List all open document tabs with cloud metadata for active doc
Returns: openDocuments[], activeDoc cloud details (project, folder, version)
fusion_get_app_state
Query open documents, active workspace, Electronics status
Returns: workspace, openDocuments[], electronicsActive
fusion_start
First-class Fusion 360 startup. Discovers Fusion360.exe via glob (so version-indirected webdeploy hashes don't matter), verifies it exists BEFORE spawning (no 'Windows cannot find' GUI dialogs), launches it if not already running, waits for the AdomBridge add-in to come online, and auto-dismisses any blocking dialogs via fusion_dismiss_blocking_dialogs. Returns when Fusion is fully ready.
Args:
dismissBlockingDialogs— optional bool (default true) — auto-clear the 'What do you want to design?' picker, error toasts, and other known blocking modalstimeoutSeconds— optional int (default 120) — total wait for add-in + dialog dismissal
Returns: resolvedPath, pid (null if already running), addinReady, dialogsDismissed[], elapsedMs, alreadyRunning
Note: ALWAYS use this instead of launching Fusion by hand. It's idempotent — safe to call when Fusion is already running. Process-detection gate means it will NEVER trigger Autodesk's 'Multiple instances are not supported' dialog.
manufacturing
detect_layers -> set_design_rules -> DRC -> export_gerbers -> export_bom -> export_cpl -> pull_file
Board must be open in PCB Editor (use fusion_open_board or fusion_show_2d_board)
fusion_detect_layers
Auto-detect PCB copper layer count (2 or 4) using ULP + CAM comparison
Returns: layerCount, is4Layer, method, copperLayers[], nextSteps[]
Note: Run first — informs gerber CAM job selection and design rule choice
fusion_export_board_image
Export PNG image with layer presets (top_copper, assembly_top, fabrication, etc.)
Args:
dpi— optional int (default: 300, max: 600)layers— optional int[] — custom layer numbers (overrides preset)listPresets— optional bool — returns preset list instead of exportingmonochrome— optional booloutputPath— optional (default: C:/tmp/adom-board.png)preset— optional: all|top_copper|bottom_copper|top_silkscreen|bottom_silkscreen|top_soldermask|bottom_soldermask|top_paste|bottom_paste|board_outline|drill|assembly_top|assembly_bottom|fabrication
Returns: outputPath, dpi, preset, fileSize, nextSteps[]
fusion_export_bom
Export Bill of Materials as CSV (grouped by value+package)
Args:
grouped— optional bool (default: true) — false for one row per componentoutputPath— optional (default: C:/tmp/adom-bom.csv)
Returns: outputPath, componentCount, uniquePartCount, nextSteps[]
Note: Format: Comment, Designator, Footprint, Quantity, Library
fusion_export_cpl
Export Component Placement List (pick-and-place) as CSV
Args:
outputPath— optional (default: C:/tmp/adom-cpl.csv)side— optional: all (default) | top | bottom
Returns: outputPath, totalPlacements, topCount, bottomCount, nextSteps[]
Note: Format: Designator, Mid X, Mid Y, Layer, Rotation (mm). Compatible with JLCPCB/PCBWay.
fusion_export_gerbers
Export Gerber RS-274X + Excellon drill files as ZIP (auto-detects layers, selects CAM job)
Args:
boardName— optional (default: from active doc name)layers— optional: auto | 2 | 4outputDir— optional (default: C:/tmp/adom-gerbers/)
Returns: zipPath, zipSizeKB, layerCount, files[], nextSteps[]
Note: ZIP contains GTL, GBL, GTS, GBS, GTP, GBP, GTO, GBO, GKO, XLN. Ready for fab upload.
fusion_set_design_rules
Apply Adom/JLCPCB design rules (.edru files) — auto-detects 2/4 layer
Args:
action— optional: apply (default) | export | showlayers— optional: auto (default) | 2 | 4outputPath— optional, for export action
Returns: edruFile, layerCount, description, nextSteps[]
Note: Run DRC after applying rules to check for violations
recovery
fusion_dismiss_recovery
Dismiss recovery dialogs + relocate recovery files to ~/.adom/recovery/
Note: Handles both 'Recovered Documents' list and 'Open recovery instead?' prompts
fusion_relocate_recovery
Move crash recovery files to ~/.adom/recovery/fusion/ (call before launch to prevent dialogs)
Note: Files preserved, not deleted. User can manually restore if needed.
ui_interaction
fusion_click_fusion
Click at coordinates in Fusion window or a specific dialog
Args:
hwnd— optional — target a specific dialog HWND instead of main windowrelative— optional bool (default: true, 0.0-1.0)x— required floaty— required float
Note: Relative coords (0.0-1.0) are scale-independent — estimate position as percentage from screenshot. Prefer fusion_send_key for dialogs (enter/escape/tab covers most cases).
fusion_screenshot_all
Screenshot main window + list all dialog windows with HWNDs
Note: Use fusion_screenshot_fusion with dialog HWND, or desktop_screenshot_window
fusion_screenshot_fusion
Capture Fusion main window or a specific dialog as PNG
Args:
hwnd— optional — dialog HWND to screenshot instead of main window
Returns: savedTo file path
Note: Image is downscaled to max 1568px. Use relative coords (0.0-1.0) for clicking — they map to actual window size regardless of image scale.
fusion_send_key
Send keyboard input to Fusion or a specific dialog
Args:
hwnd— optional — target a specific dialog HWNDkey— required string
Note: Preferred way to dismiss dialogs: 'enter' to confirm, 'escape' to cancel, 'tab' to cycle buttons. Use click only if tab order doesn't reach the right button.
fusion_window_info
Get main window HWND, title, rect, and all Qt dialog windows
Returns: hwnd, title, rect, dialogs[{hwnd, title, className, rect}]
Note: Essential for detecting blocking dialogs after operations
# Fusion 360 bridge verbs
Drive Fusion 360: CAD export, cloud docs, EAGLE electronics, manufacturing, UI.
_Part of the [Adom Desktop verb reference](VERB-REFERENCE.md). Invoke as `adom-desktop <verb> '<json>'`._
> **Note:** Two-tier architecture: bridge (port 8773) handles launch/detection; AdomBridge add-in (port 8774) handles exports/queries inside Fusion.
> **Workflow:** fusion_start -> fusion_open_cloud_file or fusion_open_board -> work -> fusion_close
## cad_3d
### `fusion_export_3mf`
Export active design as 3MF
**Args:**
- `outputPath` — required
**Prerequisite:** Active 3D design
### `fusion_export_dwg`
Export active design as DWG
**Args:**
- `outputPath` — required
**Note:** Not available via API (dialog only). Use fusion_export_step or fusion_export_dxf instead.
**Prerequisite:** Active 3D design
### `fusion_export_dxf`
Export active design as DXF
**Args:**
- `outputPath` — required
**Note:** Not available via API (dialog only). Use fusion_export_step or fusion_export_iges instead.
**Prerequisite:** Active 3D design
### `fusion_export_f3d`
Export active design as Fusion 360 archive (.f3d)
**Args:**
- `outputPath` — required
**Note:** Native Fusion format — preserves parametric features, history, component references
**Prerequisite:** Active 3D design
### `fusion_export_fbx`
Export active design as FBX
**Args:**
- `outputPath` — required
**Note:** FBX only — no fallback. Not available in current Fusion builds. Use fusion_export_usdz or fusion_export_step instead.
**Prerequisite:** Active 3D design
### `fusion_export_iges`
Export active design as IGES (.igs)
**Args:**
- `outputPath` — required
**Note:** Legacy CAD interchange. STEP is preferred for modern workflows.
**Prerequisite:** Active 3D design
### `fusion_export_obj`
Export active design as OBJ
**Args:**
- `outputPath` — required
**Note:** Not available via API (dialog only). Use fusion_export_stl or fusion_export_usdz instead.
**Prerequisite:** Active 3D design
### `fusion_export_sat`
Export active design as SAT (.sat, ACIS solid model)
**Args:**
- `outputPath` — required
**Note:** ACIS kernel format — opens in SolidWorks, SpaceClaim.
**Prerequisite:** Active 3D design
### `fusion_export_skp`
Export active design as SKP (SketchUp)
**Args:**
- `outputPath` — required
**Note:** Not available via API (dialog only). Use fusion_export_step or fusion_export_stl instead.
**Prerequisite:** Active 3D design
### `fusion_export_step`
Export active design as STEP
**Args:**
- `outputPath` — required
**Prerequisite:** Active 3D design (not Electronics)
### `fusion_export_stl`
Export active design as STL
**Args:**
- `outputPath` — required
**Prerequisite:** Active 3D design
### `fusion_export_usdz`
Export active design as USDZ (best for digital twins + GLB)
**Args:**
- `outputPath` — required
**Note:** Preserves component hierarchy, PBR materials, named nodes. Ideal for Blender→GLB or direct iOS/macOS AR viewing.
**Prerequisite:** Active 3D design
### `fusion_get_design_info`
Get active design metadata (bodies, components)
**Prerequisite:** Active 3D design
### `fusion_get_parameters`
List user parameters from active design
### `fusion_import_step`
Import STEP/STL/IGES/SAT/OBJ/F3D file into Fusion
**Args:**
- `filePath` — required Windows path
### `fusion_set_parameter`
Modify a user parameter
**Args:**
- `name` — required
- `value` — required
### `fusion_take_screenshot`
Capture Fusion viewport as PNG with camera orientation control
**Args:**
- `height` — optional (default 1080)
- `orientation` — optional: home, front, back, top, bottom, left, right
- `outputPath` — required
- `width` — optional (default 1920)
**Note:** Uses Fusion's render API (Capture Image) — not a window screenshot. Supports all standard views for product images/icons.
## cloud
### `fusion_check_recovery`
Check if a cloud file has crash recovery data
**Args:**
- `fileName` — required
- `folderPath` — optional
- `projectName` — optional
**Note:** Check BEFORE opening files to avoid blocking recovery dialog
### `fusion_create_cloud_folder`
Create folder (idempotent)
**Args:**
- `folderName` — required
- `parentPath` — optional
- `projectName` — optional
### `fusion_delete_cloud_file`
Delete a cloud file (must not be open)
**Args:**
- `fileName` — required
- `folderPath` — optional
- `projectName` — optional
### `fusion_export_cloud_file`
Export active document to local file (step/stl/f3d/iges/sat/smt)
**Args:**
- `format` — optional (default: step)
- `outputPath` — required
### `fusion_list_cloud_files`
List files and subfolders in a cloud project/folder
**Args:**
- `folderPath` — optional
- `projectName` — optional
### `fusion_list_cloud_projects`
List all cloud projects in user's hub
### `fusion_open_cloud_file`
Open a cloud file by name. STOPS if recovery exists — you must specify recovery='open' or recovery='discard'
**Args:**
- `fileName` — required
- `folderPath` — optional
- `projectName` — optional
- `recovery` — optional: open|discard
### `fusion_save_to_cloud`
Save active document to Fusion cloud
**Args:**
- `description` — optional
- `folderPath` — optional
- `name` — required
- `projectName` — optional
### `fusion_search_cloud_files`
Search a cloud project / subfolder by file-name substring. Returns matches + a detailed scope analysis. Use this for targeted lookups; for exhaustive whole-cloud walks prefer fusion_walk_cloud_tree.
**Args:**
- `folderPath` — optional starting subfolder (default: project root). NARROW THE SCOPE HERE — naming the right subfolder can reduce search time 10-50x.
- `folderTimeout` — optional int seconds per-folder cloud-API timeout (default 30)
- `maxDepth` — optional int (default 2, no upper cap)
- `maxFolders` — optional int (default 10, no upper cap). For exhaustive 100+ folder searches consider walk_cloud_tree.
- `maxResults` — optional int (default 20, no upper cap)
- `projectName` — optional (defaults to active project)
- `query` — required case-insensitive substring of the file name
- `recursive` — optional bool (default false). false = root folder only (fast); true = descend into subfolders.
- `searchTimeout` — optional int seconds overall wall-clock timeout (default 120). If you set this >180, also pass timeout:<N> to the bridge so the HTTP waiter doesn't give up first.
**Returns:** data{files[], totalFound, foldersSearched, foldersSkipped, filesSkipped, searchComplete, truncated, folderLimitReached, searchTimedOut, elapsedSeconds, costAnalysis{foldersPerSecond, estimatedSecondsPer100Folders}, hint}
**Note:** All defenses (per-folder timeout, doEvents, per-file try/except, watchdog) make hard caps unnecessary. Defaults are conservative; raise maxFolders/maxDepth/maxResults for thorough searches.
### `fusion_walk_cloud_tree`
Walk a cloud folder tree iteratively (BFS) and return a flat list of folders + files with full paths.
**Args:**
- `extensions` — optional list of extensions to include, e.g. ["f3d","fprj"]
- `folderPath` — optional starting folder (defaults to root)
- `includeFiles` — optional bool (default true) — set false for folder-only tree
- `maxDepth` — optional int (default 10)
- `maxFolders` — optional int (default 500, truncates if exceeded)
- `nameContains` — optional case-insensitive substring filter on file names
- `projectName` — optional (defaults to active)
**Returns:** folders[], files[] (each with path), stats{foldersVisited, filesFound, truncated}
**Note:** Single add-in call does the entire walk. No sleeps, no batching. For targeted finds use nameContains; for exports use extensions.
## electronics
### `fusion_board_info`
Get structured board data: components, nets, traces, DRC violations
**Note:** Much richer than a screenshot — exact coordinates and connectivity
**Prerequisite:** Board open in PCB Editor
### `fusion_electron_run`
Execute EAGLE command (WINDOW FIT, DISPLAY ALL, RATSNEST, DRC, etc.)
**Args:**
- `command` — required EAGLE command string
**Returns:** activeWorkspace, fusionOperations[] (diff of internal log), _hint
**Note:** Fire-and-forget: never returns output. Use fusion_board_info for data. Full command reference with safe/blocking split: skills/eagle-commands.md (ships next to this CLI binary). Avoid blocking commands: WRITE, ADD, SHOW, MOVE, CHANGE, EDIT.
### `fusion_execute_text_command`
Low-level Fusion app.executeTextCommand() access
**Args:**
- `command` — required Fusion text command
### `fusion_export_eagle_source`
Export active electronics document as plain EAGLE .sch or .brd XML — extracts from Fusion's .fsch/.fbrd ZIP container
**Args:**
- `outputPath` — required — full path ending in .sch or .brd
**Note:** Produces valid EAGLE XML (<?xml><eagle version=...>) parseable by standalone EAGLE, KiCad import, or any XML tool. For Fusion-native format use fusion_export_source instead.
**Prerequisite:** MUST have correct editor active: PCB Editor / Board Layout for .brd, Schematic Editor for .sch
### `fusion_export_lbr`
Export library as .scr script (no 3D refs)
**Args:**
- `outputPath` — optional
### `fusion_export_source`
Export active electronics document as .fsch (schematic), .fbrd (board), or .flbr (library) source file
**Args:**
- `outputPath` — required — full path with extension (.fsch, .fbrd, or .flbr)
**Note:** Always export .fbrd FIRST (from board view), then switch to schematic for .fsch. If file not created, wrong workspace is active — screenshot to check.
**Prerequisite:** MUST have correct editor active: Board Layout for .fbrd, Schematic Editor for .fsch
### `fusion_import_electronics`
Import Fusion-native .fsch/.fbrd/.flbr file as new local electronics project
**Args:**
- `filePath` — required Windows path to .fsch, .fbrd, or .flbr file
**Note:** Creates a NEW local document via Document.newDesignFromLocal. Use fusion_save_to_cloud to persist afterward. For legacy EAGLE files use fusion_open_schematic (.sch), fusion_open_board (.brd), or fusion_open_lbr (.lbr).
### `fusion_list_text_commands`
List available EAGLE text commands in current context
### `fusion_open_board`
Open .brd in Board Layout editor
**Args:**
- `filePath` — required
### `fusion_open_electronics`
Check if Electronics workspace is active
### `fusion_open_lbr`
Open .lbr library in Electronics Library editor
**Args:**
- `filePath` — required
### `fusion_open_schematic`
Open .sch in Schematic Editor
**Args:**
- `filePath` — required
### `fusion_show_2d_board`
Switch back to 2D board layout from 3D view
**Note:** EAGLE commands only work in 2D view
### `fusion_show_3d_board`
Switch to 3D PCB view (board needs outline on layer 20)
**Prerequisite:** Board must be open in PCB Editor
## lifecycle
### `fusion_activate_document`
Switch to an open document tab by name or type
**Args:**
- `documentType` — optional: Electronics|PCB|FusionDesign|Drawing
- `name` — optional substring match
### `fusion_close`
Close Fusion 360 gracefully
### `fusion_close_all_documents`
Close all open documents
**Args:**
- `saveChanges` — optional bool (default: false)
**Note:** Call before force-killing Fusion to prevent recovery files
### `fusion_close_document`
Close a document without save dialog (avoids modal blocking)
**Args:**
- `name` — optional (default: active)
- `save` — optional bool (default: false)
### `fusion_close_window`
Close a specific Fusion dialog window by sending WM_CLOSE (equivalent to clicking its X button). Works on dialogs that Escape doesn't close — e.g. 'Recovered Documents'.
**Args:**
- `hwnd` — required — HWND from fusion_window_info or fusion_dismiss_blocking_dialogs remaining[]
**Note:** Does NOT force-kill — the dialog can still prompt for confirmation. Use when fusion_dismiss_blocking_dialogs reports remaining dialogs that Escape couldn't clear.
### `fusion_dismiss_blocking_dialogs`
First-class blocking-dialog killer. Enumerates all Fusion Qt windows, matches them against a known list of blocking/picker patterns ('What do you want to design?', error toasts, recovery prompts, etc.), and sends Escape to each offending HWND until the add-in main thread reports responsive. Whenever any fusion_* command returns errorCode 'fusion_addin_not_responding', call this FIRST before retrying.
**Args:**
- `extraPatterns` — optional array of case-insensitive title substrings to also treat as blocking
- `maxAttempts` — optional int (default 5) — retry loop cap
**Returns:** dismissed[{hwnd,title,pattern}], remaining[], mainThreadResponsive, attempts
**Note:** Idempotent. Safe to call any time. Returns immediately with empty dismissed[] when no blocking dialogs are present.
### `fusion_document_info`
List all open document tabs with cloud metadata for active doc
**Returns:** openDocuments[], activeDoc cloud details (project, folder, version)
### `fusion_get_app_state`
Query open documents, active workspace, Electronics status
**Returns:** workspace, openDocuments[], electronicsActive
### `fusion_start`
First-class Fusion 360 startup. Discovers Fusion360.exe via glob (so version-indirected webdeploy hashes don't matter), verifies it exists BEFORE spawning (no 'Windows cannot find' GUI dialogs), launches it if not already running, waits for the AdomBridge add-in to come online, and auto-dismisses any blocking dialogs via fusion_dismiss_blocking_dialogs. Returns when Fusion is fully ready.
**Args:**
- `dismissBlockingDialogs` — optional bool (default true) — auto-clear the 'What do you want to design?' picker, error toasts, and other known blocking modals
- `timeoutSeconds` — optional int (default 120) — total wait for add-in + dialog dismissal
**Returns:** resolvedPath, pid (null if already running), addinReady, dialogsDismissed[], elapsedMs, alreadyRunning
**Note:** ALWAYS use this instead of launching Fusion by hand. It's idempotent — safe to call when Fusion is already running. Process-detection gate means it will NEVER trigger Autodesk's 'Multiple instances are not supported' dialog.
## manufacturing
> detect_layers -> set_design_rules -> DRC -> export_gerbers -> export_bom -> export_cpl -> pull_file
> Board must be open in PCB Editor (use fusion_open_board or fusion_show_2d_board)
### `fusion_detect_layers`
Auto-detect PCB copper layer count (2 or 4) using ULP + CAM comparison
**Returns:** layerCount, is4Layer, method, copperLayers[], nextSteps[]
**Note:** Run first — informs gerber CAM job selection and design rule choice
### `fusion_export_board_image`
Export PNG image with layer presets (top_copper, assembly_top, fabrication, etc.)
**Args:**
- `dpi` — optional int (default: 300, max: 600)
- `layers` — optional int[] — custom layer numbers (overrides preset)
- `listPresets` — optional bool — returns preset list instead of exporting
- `monochrome` — optional bool
- `outputPath` — optional (default: C:/tmp/adom-board.png)
- `preset` — optional: all|top_copper|bottom_copper|top_silkscreen|bottom_silkscreen|top_soldermask|bottom_soldermask|top_paste|bottom_paste|board_outline|drill|assembly_top|assembly_bottom|fabrication
**Returns:** outputPath, dpi, preset, fileSize, nextSteps[]
### `fusion_export_bom`
Export Bill of Materials as CSV (grouped by value+package)
**Args:**
- `grouped` — optional bool (default: true) — false for one row per component
- `outputPath` — optional (default: C:/tmp/adom-bom.csv)
**Returns:** outputPath, componentCount, uniquePartCount, nextSteps[]
**Note:** Format: Comment, Designator, Footprint, Quantity, Library
### `fusion_export_cpl`
Export Component Placement List (pick-and-place) as CSV
**Args:**
- `outputPath` — optional (default: C:/tmp/adom-cpl.csv)
- `side` — optional: all (default) | top | bottom
**Returns:** outputPath, totalPlacements, topCount, bottomCount, nextSteps[]
**Note:** Format: Designator, Mid X, Mid Y, Layer, Rotation (mm). Compatible with JLCPCB/PCBWay.
### `fusion_export_gerbers`
Export Gerber RS-274X + Excellon drill files as ZIP (auto-detects layers, selects CAM job)
**Args:**
- `boardName` — optional (default: from active doc name)
- `layers` — optional: auto | 2 | 4
- `outputDir` — optional (default: C:/tmp/adom-gerbers/)
**Returns:** zipPath, zipSizeKB, layerCount, files[], nextSteps[]
**Note:** ZIP contains GTL, GBL, GTS, GBS, GTP, GBP, GTO, GBO, GKO, XLN. Ready for fab upload.
### `fusion_set_design_rules`
Apply Adom/JLCPCB design rules (.edru files) — auto-detects 2/4 layer
**Args:**
- `action` — optional: apply (default) | export | show
- `layers` — optional: auto (default) | 2 | 4
- `outputPath` — optional, for export action
**Returns:** edruFile, layerCount, description, nextSteps[]
**Note:** Run DRC after applying rules to check for violations
## recovery
### `fusion_dismiss_recovery`
Dismiss recovery dialogs + relocate recovery files to ~/.adom/recovery/
**Note:** Handles both 'Recovered Documents' list and 'Open recovery instead?' prompts
### `fusion_relocate_recovery`
Move crash recovery files to ~/.adom/recovery/fusion/ (call before launch to prevent dialogs)
**Note:** Files preserved, not deleted. User can manually restore if needed.
## ui_interaction
### `fusion_click_fusion`
Click at coordinates in Fusion window or a specific dialog
**Args:**
- `hwnd` — optional — target a specific dialog HWND instead of main window
- `relative` — optional bool (default: true, 0.0-1.0)
- `x` — required float
- `y` — required float
**Note:** Relative coords (0.0-1.0) are scale-independent — estimate position as percentage from screenshot. Prefer fusion_send_key for dialogs (enter/escape/tab covers most cases).
### `fusion_screenshot_all`
Screenshot main window + list all dialog windows with HWNDs
**Note:** Use fusion_screenshot_fusion with dialog HWND, or desktop_screenshot_window
### `fusion_screenshot_fusion`
Capture Fusion main window or a specific dialog as PNG
**Args:**
- `hwnd` — optional — dialog HWND to screenshot instead of main window
**Returns:** savedTo file path
**Note:** Image is downscaled to max 1568px. Use relative coords (0.0-1.0) for clicking — they map to actual window size regardless of image scale.
### `fusion_send_key`
Send keyboard input to Fusion or a specific dialog
**Args:**
- `hwnd` — optional — target a specific dialog HWND
- `key` — required string
**Note:** Preferred way to dismiss dialogs: 'enter' to confirm, 'escape' to cancel, 'tab' to cycle buttons. Use click only if tab order doesn't reach the right button.
### `fusion_window_info`
Get main window HWND, title, rect, and all Qt dialog windows
**Returns:** hwnd, title, rect, dialogs[{hwnd, title, className, rect}]
**Note:** Essential for detecting blocking dialogs after operations