EasyCC
For adminsBundles

Service-provider bundles

Ship a single JSON file that pre-configures EasyCC for your clients on first launch.

A bundle is a single JSON file (bootstrap.json) that pre-configures EasyCC on first launch — provider config, pre-seeded agents and skills, MCP servers, branding, and managed policy. No setup wizard, no manual API-key pasting, no user training.

For deeper content, see Pre-seeding for agents/skills/MCP/secrets, and Lifecycle for the bundle builder, idempotent re-apply, testing, and the full schema.

Who uses bundles:

  • MSPs deploying EasyCC across many client tenants.
  • AI consulting firms baking their methodology into a turnkey install.
  • Resellers shipping pre-configured EasyCC under their own brand.
  • Internal IT teams pre-configuring for non-technical users.

A bundle isn't a license file, isn't encrypted, isn't signed in v1 (v2 will add signing), and isn't the same as managed policy — though a bundle can contain policy as one of its sections.

What's in a bundle

Every section is optional. A minimal bundle might set only the provider; a full one configures everything.

SectionWhat it does
brandingTitle-bar org name, welcome-screen message, support URL/email
policyManaged-policy fields (same shape as Configuration)
providerWhich Claude provider — Anthropic, gateway, Bedrock, Vertex, Foundry — plus the secret_ref for the API key
agents[]Pre-seeded agents with starting CLAUDE.md, skills, MCP servers, and starter files
userSkills[]Skills installed at user scope (visible in every agent)
userMcpServers[]MCP servers installed at user scope
onboardingSkip the setup wizard, pick first-launch view, declare required fields

On first launch EasyCC discovers the bundle, validates it against the schema, applies each section in order, writes an idempotency marker, and shows the user the configured workspace.

Minimum viable bundle

The smallest useful bundle: an org name, a provider, one agent, and skip the setup wizard.

{
  "schemaVersion": 1,
  "bundleId": "acme-easycc-v1",
  "branding": {
    "orgName": "Acme",
    "welcomeMessage": "Welcome to Acme Intelligence. Your agents are already configured for Acme projects.",
    "supportEmail": "it@acme.example"
  },
  "provider": {
    "type": "anthropic",
    "apiKeySecretRef": "keychain:com.easycc.app/auth_claude_api_key"
  },
  "agents": [
    {
      "id": "acme-marketing",
      "displayName": "Marketing",
      "pinned": true,
      "skills": [
        { "name": "summarize", "source": "bundled" }
      ]
    }
  ],
  "onboarding": {
    "skipSageOnboarding": true
  }
}

To ship it:

  1. Push the API key to the keychain at the slot referenced in apiKeySecretRef — see Secrets.
  2. Drop bootstrap.json in a discovery location (below).
  3. Install EasyCC with --silent-first-run after the bundle is in place.

The result: the user opens EasyCC, sees "Welcome to Acme Intelligence", finds a pinned Marketing agent with /summarize installed, and can immediately chat with Claude. No keys to paste; no choices to make.

Where to put the bundle

EasyCC checks five paths on every launch, in priority order. First match wins.

#PathNotes
1The path in the bundle_path managed-policy fieldAnywhere on disk
2%PROGRAMDATA%\EasyCC\bootstrap.json (Windows) or /Library/Application Support/EasyCC/bootstrap.json (macOS)Recommended default — the platform sidecar
3The URL in the bundle_url managed-policy fieldv2 feature; stub in v1
4<config_dir>/EasyCC/bootstrap.jsonPer-user fallback. Useful for testing without admin rights.
5<install-dir>/bootstrap.jsonNext-to-binary. Useful for service-provider repackaging.

File permissions: Everyone: Read on Windows; chmod 644 on macOS.

If EasyCC starts as vanilla, the bundle wasn't found. If sections fail to apply, check the EasyCC log (search for [bundle]) and the marker file at <config_dir>/EasyCC/bundle-applied.json.

Branding fields

Text-only in v1. No logo, no theme overrides.

FieldUsed inNotes
orgNameTitle bar tag, help linksShort — under 30 chars works best
welcomeMessageFirst-launch welcome screen120 chars max. "Welcome to Acme Intelligence. Your agents are already configured for Acme projects."
supportUrlHelp menu → "Support"Opens in the user's browser
supportEmailHelp menu fallbackOpens a mailto: link

Skip marketing taglines and fake urgency — the welcome screen is the first thing a non-technical user sees, and tone matters. Empty fields don't blank existing values when a bundle is re-applied; only non-empty fields overwrite.

A v2 release will add an SVG sanitizer for branded logos. Until then, the org name + welcome message carries most of the brand signal.

Where to go next

How is this guide?

On this page