DeployGate agent integration for Claude Code and Codex: upload mobile apps, manage distribution pages, set up CI/CD, and onboard your team. Supports iOS (IPA) and Android (APK/AAB).
This repository includes plugin metadata for both Claude Code and Codex:
- Claude Code:
plugin/.claude-plugin/plugin.jsonand.claude-plugin/marketplace.json - Codex:
plugin/.codex-plugin/plugin.jsonand.agents/plugins/marketplace.json
Add the marketplace and install the plugin from within Claude Code:
/plugin marketplace add DeployGate/deploygate-agent-plugin
/plugin install deploygate@deploygate-marketplace
Add the marketplace from your shell:
codex plugin marketplace add DeployGate/deploygate-agent-pluginThen enable or install the deploygate plugin from the configured DeployGate marketplace in Codex.
After installation, start the guided onboarding flow:
- Claude Code: run
/deploygate:setup - Codex: mention
$deploygate:setup
- Account creation — sign in via browser-based device authorization (
login_start→ approve in browser →login_wait) - App upload — build and upload your IPA/APK/AAB
- Distribution page — create a distribution page with an install link
- Notifications — connect Slack/Teams/Chatwork
- iOS device setup — UDID registration for Ad Hoc builds (if applicable)
The plugin signs you in to DeployGate via a browser-based device authorization code:
- Ask your agent to set up DeployGate. Under the hood it calls the
login_starttool, which returns a URL and a short code. - Open the URL in a browser where you are signed in to DeployGate and click approve.
- The agent calls
login_wait, which returns your workspace information once you approve.
The issued token is stored at ~/.config/deploygate/token (on Windows, %APPDATA%\deploygate\token) with 0600 permissions and reused across sessions. Run the logout tool to revoke it server-side and delete the local file.
Claude Code invokes plugin skills as slash commands. Codex invokes plugin skills by mentioning the skill name with $.
| Skill | Claude Code | Codex | Description |
|---|---|---|---|
setup |
/deploygate:setup |
$deploygate:setup |
Full onboarding flow with step-by-step progress display |
deploy |
/deploygate:deploy |
$deploygate:deploy |
Build and upload the current project to DeployGate |
ci-setup |
/deploygate:ci-setup |
$deploygate:ci-setup |
CI/CD integration — GitHub Actions, Bitrise, CircleCI (see external CI guide) |
sdk-setup |
/deploygate:sdk-setup |
$deploygate:sdk-setup |
Android SDK integration (crash reporting, screen capture). iOS SDK is currently not recommended. |
| Tool | Description |
|---|---|
login_start |
Begin a browser-based device authorization login. Returns a URL for the user to open and approve. |
login_wait |
Poll until the user approves login_start. On success, persists the token to ~/.config/deploygate/token (0600). |
logout |
Revoke the stored token on the server and delete the local token file. |
get_user_info |
Get current user information (workspace names, projects). Auto-clears the local token on a 401 response. |
| Tool | Description |
|---|---|
upload_app |
Upload an app binary (IPA/APK/AAB) to DeployGate. |
Parameters:
owner_name(required): Owner name (user or project)file_path(required): Absolute path to the app binarymessage: Build description (max 32,766 bytes; auto-truncated if exceeded)distribution_key: Distribution page key to update. Takes priority overdistribution_name.distribution_name: Distribution page name. Creates a new page if not found. Ignored ifdistribution_keyis also specified.release_note: Release note for the distribution pagedisable_notify: Disable push notification to testers (iOS only)ios_simulator_zip: Path to iOS simulator build zip for Instant Device (browser-based preview). Must be uploaded together with an IPA.
| Tool | Description |
|---|---|
create_distribution |
Create a new distribution page. Returns access_key for the URL https://deploygate.com/distributions/{access_key} |
list_distributions |
List all distribution pages for an app |
get_distribution |
Get details of a specific distribution page |
update_distribution |
Update a distribution page. active and release_scope are always required — use get_distribution first to retrieve current values. |
delete_distribution |
Delete a distribution page. Uploaded builds (binaries) are preserved. |
Release scope options (release_scope):
public— publicly accessible, indexable by search enginesunlisted— accessible to anyone with the link (default)passcode— requires a passcode (passcodeparameter required)authorized_only— only accessible to logged-in team members
| Tool | Description |
|---|---|
get_udids |
Get iOS device UDIDs for an app. Use unprovisioned_only=true to find devices not yet in the provisioning profile. |
| Tool | Description |
|---|---|
get_notification_settings_url |
Generate the URL for configuring Slack/Teams/Chatwork notifications. Supports distribution-level and app-level settings. |
| Tool | Description |
|---|---|
add_member |
Add a member with a specified role (owner/developer/tester). Orchestrates 3-4 API calls in one command. Free plan limit: 2 members. |
list_members |
List members of a specific team |
remove_member |
Remove a member from a team |
| Tool | Description |
|---|---|
create_shared_team |
Create a workspace-level shared team for cross-project use |
add_shared_team_member |
Add a member to a shared team (email or username, not both) |
assign_shared_team_to_app |
Assign a shared team to an app (tester-level access) |
Pre-built workflow templates in plugin/templates/:
| Template | Description |
|---|---|
deploygate-upload.yml |
Upload to DeployGate on push to main |
deploygate-pr.yml |
PR-based distribution — auto-create distribution page with QR code, cleanup on close |
npm install # Install dependencies (also installs the pre-commit hook)
npm run build # Compile TypeScript (does not touch plugin/scripts/bundle.js)
npm test # Run tests
npm start # Run the MCP server from dist/index.js (no bundle needed)
npm run bundle # Regenerate plugin/scripts/bundle.js for plugin-level testingplugin/scripts/bundle.js is the single-file build that end users execute when the plugin is loaded by Codex / Claude Code. For day-to-day iteration (unit tests, running the server via npm start) you do not need to touch it. When you want to verify the plugin end-to-end through the Codex / Claude Code plugin loader, run npm run bundle to refresh it locally — but do not commit the result. The release-please workflow regenerates and commits the bundle automatically when it opens or updates a release PR, and a pre-commit hook in .githooks/ (installed via the prepare script) blocks accidental commits.
-
Register your local checkout as a marketplace and install the plugin (once):
/plugin marketplace add /path/to/deploygate-agent-plugin /plugin install deploygate@<marketplace-name> -
Iterate:
- Edit source under
src/. - Run
npm run bundleto regenerateplugin/scripts/bundle.js. - Restart your Claude Code session (
/exitand relaunch, or/restart). The MCP server is spawned as a subprocess at session start, so a fresh session picks up the new bundle automatically — noplugin reinstallis needed.
- Edit source under
-
plugin reinstallis only required when you changeplugin/.claude-plugin/plugin.json,.agents/plugins/marketplace.json, or add/remove skills underplugin/skills/.
Releases are automated by release-please.
- All work lands on
mainvia squash-merged pull requests. - PR titles must follow Conventional Commits:
feat: …→ minor version bumpfix: …→ patch version bumpfeat!: …or a body containingBREAKING CHANGE: …→ major version bumpchore:,docs:,refactor:,test:,build:,ci:→ no version bump (and, by default, do not appear in the changelog unlesschangelog-sectionsis configured in.release-please-config.json)
- Individual commits inside a PR can have any title; only the squash-merge title matters.
- Merge a
feat:orfix:PR intomain. - The
Releaseworkflow opens (or updates) a Release PR that bumps the version inpackage.json, bothplugin/.claude-plugin/plugin.jsonandplugin/.codex-plugin/plugin.json, thedeploygateentry in.claude-plugin/marketplace.json, and.release-please-manifest.json, and appends toCHANGELOG.md. - Merge the Release PR.
- The
Releaseworkflow runs again, creates the git tagdeploygate--vX.Y.Z, and publishes a GitHub Release.
End users can pin to a tag with:
/plugin install DeployGate/deploygate-agent-plugin@deploygate--v1.4.0
Without a pin, claude plugin install follows main. Users can fetch the latest published tag with claude plugin update deploygate.
This plugin is open-source software provided as-is on a best-effort basis. See SUPPORT.md for where to get help and what to expect, and CONTRIBUTING.md for how to contribute. All participation in this repository is governed by our Code of Conduct.
MIT — DeployGate Inc.