Read Connect Codex or Claude Code to Studio for setup, the local engine and model data flow, account and billing ownership, and the applicable provider conditions. Official local integration support is distinct from certification or permission for a commercial/hosted deployment.
The consumer PexarBolt app has no authoring MCP endpoint. Studio manages developer projects in its own workspace; its connection settings must be copied separately. Use the standalone CLI/MCP from Codex or another editor with its own authentication.
For the developer platform, plugin_submission exports a checked runtime and editable source as a local .boltsubmission with the MIT license. Supply projectId and expectedRevision. It does not upload or publish; the author confirms rights and submits for review on the website. See publishing and distribution.
plugin_submission
.boltsubmission
projectId
expectedRevision
Download Plugin Studio, then open Agent service in its workspace and enable MCP to let your own assistant read the SDK/skill, create/edit plugins, check interactions, inspect screenshots, export/import packages and inspect runtime/device state. The service does not call an AI provider or supply a model. External Claude Code can connect using its own authentication. For in-app conversation driven by your local Claude Code engine, select Claude in Vibe and follow the connection guide. Your engine authentication determines plan access and billing. Vibe provider selection does not change the Studio MCP tool contract or authentication.
Closing the Studio window hides it to the tray; the Agent service (HTTP/stdio relay), enabled plugins and projects stay available until Quit PexarBolt Plugin Studio. Hiding does not change MCP settings or the token.
The plugin API, limits and platform boundaries are defined in the plugin contract, which plugin_context returns in its skill section. Resource rules and required live checks are in Reliability requirements; external storage is covered by the filesystem guide, photos, video and frames by plugin media, and device-direct HTTP/WebSocket cards by device data sources.
plugin_context
skill
plugin_context (overview/sdk/all) exposes machine-readable capability descriptors alongside the SDK source: optimizationPolicy, dataTransferPolicy, filesystemWatch (with transfers, contentRead, eject, io, fileChanges and discovery) and networkAccess (Desktop ctx.http versus Dock-fetched sources from LAN hosts and public HTTPS/WSS). plugin_list and plugin_runtime status report installed deviceExecution, dataSources, externalStorage scope and dataTransfer (channel, maxFrame, shared bulkBytesSent). plugin_check returns verification with optimizationReview:'required', liveVerified:false and requiredLiveChecks. Fixture previews simulate volumes, transfers, reads, ejection, HID and Dock data; they never prove hardware, storage or service behavior.
optimizationPolicy
dataTransferPolicy
filesystemWatch
transfers
contentRead
eject
io
fileChanges
discovery
networkAccess
ctx.http
sources
plugin_list
plugin_runtime status
deviceExecution
dataSources
externalStorage
dataTransfer
channel
maxFrame
bulkBytesSent
plugin_check
verification
optimizationReview:'required'
liveVerified:false
requiredLiveChecks
Device installation is independent of host execution: install_on_device stores entries even while stopped. plugin_runtime start enables a plugin (runtime: 'standby'): it becomes available on the Dock, and the App starts its host runtime when the Dock or simulator opens it and stops it after runtimeLifecycle.idleStopMs (60 seconds) hidden. Runtime logs therefore appear after opening. Native execution works after installation without a host runtime; other plugins need start and existing grants. Do not automatically grant permissions to finish installation. See Resident Device Installation.
install_on_device
plugin_runtime start
runtime: 'standby'
runtimeLifecycle.idleStopMs
The displayed prompt masks secrets; the copied prompt contains the real token and updates when transport or token changes. Do not publish it. Assistants unable to configure their client should provide concrete setup instructions, then continue after connection. Manual setup uses Copy configuration; reconnect MCP and confirm plugin_context is available.
Streamable HTTP listens at http://127.0.0.1:/mcp with Authorization: Bearer . Client-specific field names vary. Stdio-only clients can use the bundled relay without separately installing Node or the toolkit. Moving the App requires copying its stdio configuration again.
Merge the following into the active profile's cordis.patch.yml, preserving other plugins/settings. The default dsh web profile is usually ~/.dsh/profiles/web/cordis.patch.yml. Install @deepseek-ai/dsh-mcp-client through profile management or npm install inside the profile, then reload it.
- id: pexarbolt-mcp name: '@deepseek-ai/dsh-mcp-client' config: serverName: pexarbolt transport: streamable-http url: 'http://127.0.0.1:<port>/mcp' headers: Authorization: 'Bearer <token>' toolCallTimeoutMs: 120000
Use the App's real port/token. dsh bridges tools rather than resources/prompts, so plugin_context supplies complete guidance. Screenshot review requires an image-capable model and image attachment support; otherwise the user reviews the App preview and the Agent reports visual review as pending. See dsh MCP client documentation.
Example prompt:
Use pexarbolt MCP. Call plugin_context and read sdk and skill. Build a Pomodoro plugin, check controls and review its screenshot, package and import it into Plugin Studio for testing. Export a .boltplugin for the consumer PexarBolt app. Finally read runtime status and report any remaining settings or device actions.
Short requests still apply shared design guidance for Dock dimensions, typography, color, controls, empty states and screenshot review.
Pass projectId for project operations. Write/check/preview/event/screenshot/package/install/restore/remove also require the latest plugin_read revision as expectedRevision. Use the new revision after edits; on conflict, reread and merge rather than overwriting with stale source.
Sequence: context → create/edit_installed → read → write → check → event → screenshot → package/install → runtime status. The service UI lists projects/previews and links installations. Recheck after source edits or failed controls. At most 20 checked revisions are retained.
Capabilities include Dock status, authorized HTTP/binary reads, private storage, Agent sessions/approvals, media, photos, video, media/keyboard/mouse HID, Canvas frames, external storage, device-direct data sources (the Dock fetches LAN hosts or public HTTPS/WSS, read-only) and native controls/fonts/icons. Use the actual SDK contract; arbitrary shell/filesystem/application targeting is unavailable.
Import all images, including PNG, by local path:
{"projectId":"current-project-id","expectedRevision":"revision-from-plugin_read","files":[{"path":"assets/cover.png","source":"/absolute/path/cover.jpg"}]}
plugin_write accepts PNG/JPEG/WebP/GIF/BMP/AVIF/SVG and generates packaged static PNGs. Animated inputs yield a still; use ctx.frames for animation. Files must be local to the service computer. Installed plugins do not depend on source paths.
Include projection dimensions/asset references and manifest icon in the same write so import can resize proportionally without upscaling. Images are at most 854×480, icons 256×256 with transparent padding. Compression/further resizing keeps aggregate assets within 1 MiB compressed and 4 MiB decoded. Inputs are limited to 10 MiB, 8,192 pixels per side and 16 MP each; one write permits 10 MiB/32 MP total. Remove unused assets if existing files fill the budget.
images returns final paths, dimensions and bytes. Non-PNG extensions normalize, with asset/variants/icon/hash references updated. plugin_read.files omits image bytes by default; assets contains metadata, so omission does not mean deletion. includeBinary:true and Base64/Data URL input are explicit compatibility options. MCP screenshots retain protocol image encoding. Local paths avoid the older Only PNG assets accept base64 prefix issue.
On import failure, correct the exact source error and reread the current revision before retrying; do not reinstall or repeat hardware actions. Export unsupported/corrupt files as valid PNG first. CLI uses bolt-plugin image DIRECTORY SOURCE_IMAGE assets/cover.png; JS uses PluginSession.importImage.
plugin_install imports into Desktop. Start (enable), device install and opening are separate runtime actions. Users review new permissions and configure secrets/folders in Settings; MCP never auto-grants or reads secrets. plugin_configure accepts ordinary settings. Runtime nextSteps reflects actual grants/configuration.
Fixture Brokers isolate Dock, HTTP, media and HID data; Canvas really renders. Fixture success proves neither hardware nor service behavior. Runtime logs expose platform diagnostics without business payloads/credentials. Connect/update incompatible or offline Dock before testing.
There is no fixed runtime/preview/simulator instance limit: capacity.limit:null. Starting live releases that project's preview; service previews expire after five idle minutes. overloaded may still indicate per-plugin limits or bounded service queues. Reduce concurrency or wait, preserving source rather than repeatedly editing it. Old four-instance errors require updating/restarting the relevant App/toolkit.
Limits: 20 projects, 2 MiB source/project, eight queued serial operations, 120 HTTP requests/minute, eight concurrent requests and 3 MiB request bodies. Service shutdown/token rotation cancels queued work, signals active checks and releases previews. Started imports/external actions may finish; read status before considering retries of unknown outcomes. Installed and enabled plugins are not deleted or disabled by service shutdown.
For connection failure, check App/service startup. 401: recopy configuration. 403: use a local MCP client, not a browser Origin. 429: reduce traffic and honor Retry-After. For occupied ports, disable, choose zero and re-enable. Update every client after token rotation.
The service defaults off, binds only 127.0.0.1, validates Host/token and stores settings with user-private permissions. Enabled state, port and token persist; projects live under agent-authoring/projects in the App profile. App exit stops the service.
Plugin Tools provides CLI/API and bolt-plugin mcp --directory without Desktop. Its nine development tools and Desktop's 18 tools share SDK, skill, validation, sandbox and rendering. Desktop additionally manages multiple projects/installations.
bolt-plugin connect --url uses PEXARBOLT_MCP_TOKEN and provides a stdio relay. It requires Desktop; scaffold/check/preview/screenshot/package/mcp remain independent. CLI invokes no AI model.
pnpm --filter @pexarbolt/plugin-studio type-check pnpm --filter @pexarbolt/plugin-studio test -- electron/plugins/agent-authoring-service.test.ts electron/vibe/vibe-manager.test.ts pnpm --filter @pexarbolt/plugin-studio test:plugin-agent
End-to-end tests need Vite at http://127.0.0.1:5174 or PEXAR_TEST_VITE_URL. They use temporary Electron profiles, real HTTP/stdio MCP clients, sandbox and PNG checks, writing .cache/agent-service. They do not call models, alter user plugins or operate physical hardware. dsh model calls and Dock tests need the real environment.
Use Projection.pages and root-node page tags for Dock-local left/right/up/down swipes in both Host-connected and independent native plugins. Optional read-only pageChange reports {from,to,direction} to Host. Requires pages.swipe.v1 firmware. See local page navigation, the page-deck example and SDK types.
Projection.pages
page
pageChange
{from,to,direction}
pages.swipe.v1
page-deck