The self-hosting plan

The maintainer, 2026-11-08: "install the hosting plugin by default" · "Hosting should also be in the selfhosting tier" · "let's create our own tier for selfhosting" · and, on its scope, "Only the listed packages" — Pro stays a separate purchase.

Until this plan existed, a Mac that registered with the registry landed on Free. Hosting is the app a Mac's first instance needs (the heartbeat, the local instances, the fleet monitor) and it is filed enterprise, so the registry refused it, and the first fleet Mac had its plan raised to Enterprise by hand (2026-11-07). This plan removes that, through the declared plan model and nothing else: no grant, no code path that skips the gate.

What it is

Wire id selfhosting (PlanTiers.SelfHosting) — label Self-hosting
Rank 5: above Free (0), below Personal (10) — by rank it covers the free baseline only
Members the packages it includes by name beside its rank (below)
Price free (monthlyPrice: 0), no annual price, not contact-sales
Bought online no — PlanTiers.IsSelfServe stays Personal and Pro only
Model spend unmetered: local models (Ollama, Apple Intelligence) or the owner's own keys
Seeded Admin/Tiers/selfhosting with rank, members, created by the Store's tier seeding; members is a RULE field, so a live node that disagrees with the seed is brought back in line
Shown on the Plans page as a card without a button, saying how it is obtained

The members

Package Tier Why a self-hoster needs it
Hosting enterprise deployment records, local instances, the heartbeat, the fleet monitor
ClaudeCode pro the Claude Code harness — agent rounds on the machine's own CLI
Acp pro the Agent Client Protocol harness
Analysis pro the analysis tools agents call
WebSearch pro web search for agents
Voice pro speech in and out
Teams personal Microsoft Teams chats and messages
Indexing, Approvals, Observability pro the non-free onboarding defaults: ingestion, approvals, the instance's own observability
iMessage, WhatsApp personal the non-free Mac defaults: the Mac's own messages

The free onboarding defaults (Essentials and its closure, AI, Chat, OpenAI, MyAi, Mail, Publish, OgCard, Export, Notifications, Mcp, Hosting.Instance, the view packs, Providers, Apple Intelligence, Google) and Hosting's requirements (Store, AI, Essentials, Feedback) are free or untiered, so the rank covers them. Not covered: every other Personal or Pro package — Codex, Copilot, Cursor, Grok, OpenCode, Antigravity, Signature, Expenses, Video, DataModelling, BusinessRules, AzureCostManagement, Chess, the games … — and the enterprise vertical. Those stay a purchase.

The rule — one declaration, two readers

A plan covers a package when the package's tier ranks at or below the plan's, when the plan is all-access (Dedicated), or when the package is one of the plan's declared members. A member is covered by its plan whatever its tier; it widens no other plan.

How an installation gets it

  1. New installations. memex-local registers OPEN (no key) unless the operator passes one. The registry answers an open registration with its configured open registration key (PluginCatalog:OpenRegistration:Key), and the instance enrols into that key's plan, which is selfhosting. An open registration is by construction a self-hosted install presenting itself.
  2. Already registered installations are moved by a registry global administrator with InstancePlanService.SetPlan (Admin ▸ Instance grants on the registry).
  3. Then the instance's catalogue pass installs what PluginCatalog:InstallByDefault names — Plugins/Hosting on a Mac — and the setup wizard's ticked defaults, with nothing refused.

Open decision

Tests