Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .factory-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@
"description": "Pull request lifecycle skills: create PRs with consistent conventions and follow up on them until merge-ready",
"source": "./plugins/code-review",
"category": "productivity"
},
{
"name": "easygerber",
"description": "AI PCB design, layout, and routing",
"source": "./plugins/easygerber",
"homepage": "https://easygerber.com/agents"
}
]
}
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,14 @@ Skills for continuous learning and improvement.

Autonomous experiment loop for optimization research. Try an idea, measure it, keep what works, discard what doesn't, repeat. Works standalone or as a mission worker.

### easygerber

AI PCB design, layout, and routing

**Skills:** `easygerber` — board workflow through EasyGerber’s hosted MCP service.

See [plugins/easygerber/README.md](plugins/easygerber/README.md) for setup and account access.

## Plugin Structure

Each plugin follows the Factory plugin format:
Expand Down
28 changes: 28 additions & 0 deletions plugins/easygerber/.factory-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "easygerber",
"displayName": "EasyGerber",
"version": "0.3.4",
"description": "AI PCB design, layout, and routing",
"author": {
"name": "EasyGerber",
"url": "https://easygerber.com"
},
"homepage": "https://easygerber.com/agents",
"license": "MIT",
"keywords": [
"easygerber",
"ai pcb design",
"pcb design",
"circuit board design",
"printed circuit board design",
"circuit design",
"schematic design",
"pcb layout",
"automatic pcb routing",
"electronic component search",
"3d pcb preview",
"gerber export",
"pcb manufacturing files",
"bill of materials"
]
}
24 changes: 24 additions & 0 deletions plugins/easygerber/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
MIT License

Copyright (c) 2026 EasyGerber

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This license applies only to this integration package. It does not grant
rights to EasyGerber's hosted service, component catalog, or private engines.
59 changes: 59 additions & 0 deletions plugins/easygerber/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# EasyGerber for Factory Droid

![EasyGerber](assets/logo.svg)

AI PCB design, layout, and routing.

Design circuit boards with AI, from your first idea to the files your manufacturer needs. Describe what you want to build in everyday language, or start with the pin assignments in your firmware.

Choose from over one million electronic components in EasyGerber’s catalog, including LEDs, sensors, connectors, and microcontrollers. Build with real catalog parts, their footprints, and available 3D models—from a simple LED circuit to a custom electronics project.

Create and edit schematics, generate PCB layouts with automatic component placement and routing, and refine your design through conversation. Adjust board settings, explore copper layers, inspect your board in interactive 3D, and check for blocking layout issues before exporting.

Download Gerber files, drill files, a bill of materials (BOM), component placement files, and an editable EasyGerber file to continue working on your design.

Start with one guest board without signing up through `https://www.easygerber.com/api/mcp`. No account authorization is needed for guest access. When you sign in to keep or continue working on the guest board, the agent saves it to your account after consent. If you connect through client settings for that purpose, resume the task so the agent can finish saving it; the sign-in callback alone does not transfer the board. Signing in solely to delete an account board or submit feedback does not authorize claiming a guest board.

## Install the plugin

This Factory plugin wraps the published EasyGerber 0.3.4 integration at [immutable source revision `fb61fbb68621d15ecb4861fe849346d733cc8f76`](https://github.com/EasyGerber/easygerber-agent-plugin/tree/fb61fbb68621d15ecb4861fe849346d733cc8f76/claude). Its manifest, MCP configuration, skill, workflow reference, artwork, and license retain the published file contents; only the two native configuration paths are renamed for Factory. The npm installer configures Codex only and is not needed here.

Requires the Factory Droid CLI with plugin support and an internet connection to EasyGerber. From a checkout containing this contribution:

```sh
droid plugin marketplace add .
droid plugin install easygerber@factory-plugins --scope user
```

After this contribution is accepted into the official marketplace:

```sh
droid plugin marketplace add https://github.com/Factory-AI/factory-plugins
droid plugin install easygerber@factory-plugins --scope user
```

Restart Droid after installation. Use `/plugins` to inspect the EasyGerber plugin and `/mcp` to inspect its connection or authorize account access when needed. Keep normal tool approvals enabled. Factory model access has its own account and plan requirements.

For a connection check without board changes, ask: “Read the EasyGerber skill and report the available EasyGerber tool names. Do not call a tool, create a guest session or board, authenticate, or send feedback.” Native installation, guest workflows, and account authorization are separate checks; this package does not claim that an untested flow passed.

Try: “Create a small 3.3 V LED board, show a preview, and export the manufacturing files and EasyGerber file.” Use an authorized account if connected; otherwise the service supports one guest board per session. The guest board has no automatic expiry, while generated download links expire after fifteen minutes. The private guest viewer link grants access to the design; keep it private. Signing in to continue working on that guest board includes saving it to your personal account. The agent retains the original guest capability for the claim and continues with the returned account board.

## Connection and data

The plugin connects directly to EasyGerber’s hosted MCP service at `https://www.easygerber.com/api/mcp`. It runs no local server, installer, hooks, or package downloads. Board layout, routing, and scoring run on EasyGerber’s servers. Droid can read relevant firmware locally to identify pin assignments; it sends only the board requirements, published component selections, schematic changes, board or organization identifiers, and feedback messages you approve for the requested work. It should not upload an entire repository or unrelated files.

The remote service supplies catalog results, saved board data, previews, and private export links. Account access uses the service’s advertised OAuth flow and your consent. Do not paste credentials into chat or add tokens to plugin files. Organization permissions, plan limits, and normal request and compute protections apply. The service retains agent activity analytics for one year, including guest history after claim. Removing the plugin does not revoke account authorization or invalidate a private guest link; manage account connections in Droid or EasyGerber.

To delete a specified account board, ask explicitly. The agent reads its current revision and uses `delete_board` only when the service advertises it. Deletion is permanent, has no restore operation, and cancels active jobs. It requires separate `boards:delete` consent through a client that supports requesting that scope, plus personal ownership or an organization owner/admin role; existing `boards:write` access is insufficient. A client registration that excludes this scope must be deliberately updated or replaced through the normal connection flow before consent; existing connections do not gain deletion access automatically. Guest deletion is unsupported, and a guest board must not be claimed merely to delete it. Signing in only to delete an account board does not authorize claiming a guest board. Only `{ boardId, deleted: true }` confirms deletion; `not_found` or a lost response does not.

Creating or exporting a board does not purchase fabrication, make the design public, or delete the source board. A successful layout check is not a safety certification. The MIT license covers this integration package; the hosted service and private engines have separate terms.

## Feedback and support

Ask Droid to send EasyGerber a bug report, feature request, or general feedback. The `submit_feedback` tool sends only a message you ask or agree to share, from 10 to 2000 characters after trimming, to a private administrator inbox. It does not automatically attach transcripts, raw diagnostics, board exports, credentials, or private links. Anonymous feedback needs no account, guest session, or board. Existing valid account or guest access can attribute a report without additional board permissions; rejected credentials do not silently become anonymous. A guest board must never be claimed merely to submit feedback.

The agent reuses the same request ID and identical report when retrying an uncertain submission. A receipt ID and timestamp confirm submission, without promising a response or roadmap commitment. If the connection or service is unavailable, use [GitHub Issues](https://github.com/EasyGerber/easygerber-agent-plugin/issues). Issues are public and require a GitHub account to post; remove credentials, private links, and confidential board data before publishing.

See [documentation and support](https://easygerber.com/agents), [privacy policy](https://easygerber.com/privacy), and [terms](https://easygerber.com/terms).

Submission and support contact: hello@easygerber.com.
5 changes: 5 additions & 0 deletions plugins/easygerber/assets/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions plugins/easygerber/assets/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions plugins/easygerber/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"easygerber": {
"type": "http",
"url": "https://www.easygerber.com/api/mcp"
}
}
}
28 changes: 28 additions & 0 deletions plugins/easygerber/skills/easygerber/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
name: easygerber
description: Create, inspect, revise, export, or explicitly delete EasyGerber circuit boards, or submit user-requested EasyGerber feedback, using its remote MCP tools. Use for EasyGerber board work, bug reports, and feature requests; ordinary firmware-only edits do not require this skill.
---

# EasyGerber board design

Use the installed EasyGerber MCP tools for the requested board workflow. Hosts may prefix tool names differently; discover the tools available on the EasyGerber connection and follow their current schemas. If the connection is missing, direct the user to https://easygerber.com/agents. Never ask for tokens in chat or read credentials from project files.

This skill expects `check_board_layout` for saved-layout blocker checks. If the connection does not advertise it, report that the service and integration versions do not match; do not substitute another tool or treat an unavailable check as a pass.

EasyGerber's production service supports one guest board per session without an account. For a new board, finish any pending guest claim first, then reuse this task's guest session or already authorized account. If neither is established, call `start_guest_session` directly: success supplies the needed guest session; `account_connected` means no guest was created and you should use the connected account. Do not use `get_profile` or `list_organizations` to discover whether an account is connected, including parallel probes. Users do not need to choose an account mode or mention guests. One guest board supports previews and both manufacturing ZIP and `.egb` exports before signup, with no lifetime operation caps or automatic expiry when `expiresAt` is null; normal request-rate, complexity, and shared compute protections apply. Keep its capability token in tool arguments only, never in project files, logs, or ordinary messages; the private viewer link returned by the service is the only user-facing exception and is needed to return to the board. Read the guest section of [the workflow reference](references/workflow.md) before starting or claiming a guest board. Existing account boards and organization work require the host's sign-in flow; an expired account connection is not permission to recreate private work as a guest.

When the user chooses sign-in or account board work with a guest board in this task, automatically save that board to their personal account. Signing in solely to delete an account board or submit feedback does not authorize claiming a guest board; never claim a guest board merely to delete it or send feedback. Use `claim_guest_board` with its original `guestToken` to initiate account authorization, then retry that same claim immediately when authentication resumes. Do not ask a separate “Keep board?” question or use `get_profile` as a substitute for the pending claim. Follow the workflow reference for busy retries and the returned account board ID. Generic native Settings **Authenticate** has no guest-board context; after that flow, the agent must resume the claim to complete the save.

Read relevant firmware locally to extract pin assignments, signal names, power requirements, and connector needs. Send the minimum board requirements and schematic data needed for the request; do not upload the whole repository or unrelated files. Clarify electrical choices that cannot be inferred, such as an ambiguous power supply or conflicting pin assignments.

For account board work, complete any pending guest claim first, then use `get_profile` to identify personal ownership and `list_organizations` when the user requests organization board work. New account boards belong to the personal account by default; pass `organizationId` only for the organization the user requested. Existing board operations use the board's saved ownership. Authorization remains limited by the user's permissions in that organization.

Read [the workflow reference](references/workflow.md) for board creation, revision, generation, validation, and export. Search and inspect published catalog parts before connecting them. Preserve catalog IDs, pin identities, footprints, and available 3D models. Never invent component records or replace published footprints. Author the thin schematic and app-visible settings; the server hydrates catalog data and hidden routing/manufacturing constraints.

Inspect an existing board before editing it. Apply only the requested changes and use the revision/concurrency fields required by the live tool schema. On a conflict, reload the board and reconcile the user's change; do not overwrite a newer revision blindly. Board generation is asynchronous: retain its returned generation ID, inspect its status, and report results or actionable failures. Reuse an existing returned operation when a request outcome is uncertain instead of starting duplicate work.

Use `delete_board` only for an explicit user request to delete a specified account board, never for unsolicited cleanup. Deletion is permanent, has no restore operation, and cancels active jobs. It requires separately approved `boards:delete` access plus personal ownership or an organization owner/admin role; `boards:write` is insufficient. Read `get_board` first and pass its revision as `expectedRevision`. Guest boards cannot be deleted through this tool. Read the deletion section of the workflow reference before calling it. Report success only from `{ boardId, deleted: true }`; `not_found` can mean unavailable, insufficient ownership, or already absent and does not prove this request deleted the board.

Use `submit_feedback` only when the user asks or agrees to send a bug report, feature request, or general feedback to EasyGerber. Read the feedback section of the workflow reference first. Send a concise approved message, never automatic transcripts, raw diagnostics, board exports, credentials, or private links. Feedback can be anonymous without signing in, starting a guest session, or creating a board; existing valid account or guest access can attribute it. Do not expand board permissions for feedback. Return the receipt without promising a response or roadmap commitment. If the connection or service is unavailable, offer [GitHub Issues](https://github.com/EasyGerber/easygerber-agent-plugin/issues) and explain that issues are public before any posting.

Keep actions within the user's requested scope. Creating, revising, or exporting a board does not authorize deletion, public sharing, or purchasing fabrication. Explain returned electrical or manufacturing issues accurately; successful generation or no blocking issues is not a safety certification. Return the board link and requested artifacts, and distinguish saved, generated, exported, and explicitly confirmed deleted states.
Loading