Skip to content

extension_project_create ​

Create an extension.dev project for an extension that does not have one yet, without opening the console.

Quick start ​

Create the extension.dev project for this build under acme

How the agent uses it ​

Use it right after extension_create and extension_build, once the extension's source is pushed to a GitHub repository, and BEFORE extension_auth: extension_auth can only log in to a project that already exists, and this tool is what brings that project into existence. Ask for nothing but the project slug and the repo; the platform finds the GitHub App installation on the approving account itself, and if there is none it returns a connect link to open. Two-phase, like login: the first call returns a code and a URL where a signed-in member of the workspace approves creating exactly this project; call again with the returned deviceCode to finish. The approval mints a provisioning grant that lives minutes, can only create the one named project, and is kept on this machine only while a create's outcome is unknown: then it sits in a file only this user can read, beside the stored logins, so calling again with the same deviceCode and arguments reads that outcome (created, still creating, or refused) with no second approval. On success the platform creates the project and its mirror repository, and dispatches the first build when it can: the answer says in firstBuild whether one was dispatched and, when none was, why (no commits, no build workflow, a spent build allowance, a paused dispatch). Every build runs the stored build command for each enabled browser exactly as stored, then reads that browser's outputDirectory, so the default command is npm run build -- --browser <browser> (the browser's name in place of <browser>) into dist/<browser>. Then run extension_auth (action: login) against the new project, and extension_publish to share it. To create several projects in one workspace under one approval, pass projects instead of project and repo: the approval page lists every name, each project is created by its own request, and each one's 7-day token is stored as that project's login, so no extension_auth call is needed afterwards. A list takes a few calls to finish: while projects remain the answer is status 'creating' with the same deviceCode to call again, and each call answers within about 45 seconds. Until it expires the list's grant is kept in a file only this user can read, beside the stored logins, so a restarted server resumes the list with no second approval. One approval creates at most 10 projects, the cap the platform states in its login config, because it creates at most 10 per hour for one approving account; the next 10 can start in a new call once that limit allows. A longer list is refused before any approval is asked for, never split silently, and so is any list on a platform that does not advertise batch onboarding.

Reference ​

Groupplatform, on with --features=local,platform (private alpha)
TierPlatform
Needsthe server started with --features=local,platform
Read onlyno
Destructiveno
Idempotentno
Reaches the open webyes

Inputs ​

InputTypeRequiredDefaultWhat it does
projectstringnoTarget project as '<workspace>/<project>'. The workspace is the GitHub login of the approving user for personal workspaces; the project slug is the new project's name and must not exist yet.
repostringnoSource GitHub repository as '<owner>/<repo>'. The extension's code must be pushed there, and the owner must be the same GitHub account that approves the device code.
installationIdstringnoOptional override. Leave it out: the platform finds the extension.dev GitHub App installation on the approving account itself. Pass it only when an operator needs to name one explicitly, and it must still be an installation on that account or the platform refuses it.
displayNamestringnoHuman name for the project. Defaults to the project slug.
descriptionstringnoShort project description. Defaults to a generic sentence naming the repo.
installCommandstringno"npm install"Dependency install command the build runs first.
buildCommandstringno"npm run build -- --browser <browser>"Build command the platform runs for each enabled browser, as it is: the platform does not add --browser to a command stored through this tool (only its import and clone paths derive one), and extension build with no flag targets chromium and writes dist/chromium, which no browser's outputDirectory reads. The default therefore names the browser; <browser> in a command of your own becomes each enabled browser's name.
outputDirectorystringno"dist/chrome"Directory the build writes the loadable extension into. With more than one browser, <browser> in the path becomes each browser's name (Extension.js writes dist/<browser> for the browser its --browser flag names; extension build with no flag targets chromium and writes dist/chromium, so a buildCommand that leaves the flag out never fills dist/chrome), and when it is left out every browser defaults to dist/<browser>.
browsersarray of "chrome" | "edge" | "firefox"no["chrome"]Browsers the platform builds, each enabled with the same install and build command and its own output directory. Pass every browser the extension targets, for example ["chrome", "edge", "firefox"], so the project needs no console visit to go cross-browser.
outputDirectoriesobjectnoPer-browser output directory overrides, for example {"edge": "build/manifestv3"}. A browser named here wins over outputDirectory.
projectsarray of objectnoCreate several projects in one workspace under one approval, instead of project and repo. 1 to 10 entries (the platform's cap per approval; never more than 20), each { project: '<workspace>/<project>', repo: '<owner>/<repo>' }, all in the same workspace, each project named by its exact slug (lowercase letters and digits joined by single dashes, at most 48 characters), none twice and none existing yet. An entry may also carry displayName, description, installCommand, buildCommand, outputDirectory, browsers and outputDirectories for that project alone; the same inputs at the top level are the shared default for every entry that leaves them out. The answer carries one row per project: created and logged in, created with no token (run a batch extension_auth login), refused with the platform's code, or not attempted. A refusal on one project never hides the others.
deviceCodestringnoResume token from the prior call's deviceCode; omit on the first call. A batch returns the same deviceCode until every listed project has an answer.
apistringnoPlatform base URL (default EXTENSION_DEV_API_URL, else https://www.extension.dev)

When it fails ​

  • The tool is missing from the client's list. Start the server with --features=local,platform; see Platform tools.
  • The answer reads status: "platform-held". extension.dev is not open to the public yet, so nothing ran on its machines. Creating, running and building an extension still work on your machine; see Use the platform from your agent.
  • The answer depends on the network. This tool reaches the open web, so a refusal can be the network, not the project.

Next ​

  • MCP server: install, the two groups and the session gates
  • Install in your client
  • extension_auth: Sign this machine in to extension.dev, report that login, or clear it.
  • extension_builds: Read, rebuild and configure the platform's builds of the logged-in project on extension.dev.
  • extension_preview_web: Preview an in-progress extension in the web emulator, with no real browser.
  • extension_publish: Publish the project your stored token is scoped to (extension_auth, or EXTENSION_DEV_TOKEN) to extension.dev, and return its shareable URL.
  • extension_release_promote: Promote a built extension to a release channel (stable, preview, beta, …) on extension.dev, headless.
  • extension_release_status: Read where a project stands on extension.dev, from the public registry (registry.extension.land).
  • extension_shares: List, create and revoke the public preview links this token has shared, which is what extension_preview_web share:true hands out.
  • extension_submit: Submit a built extension for store REVIEW through extension.dev, which holds your store credentials and dispatches from your project's mirror CI: the Chrome Web Store, Firefox A...
  • extension_workspace: Read the extension.dev workspace a stored login belongs to: its plan and limits, its projects, and its usage.
  • extension_workspace_create: Create an extension.dev workspace that does not exist yet, without opening the console.