Skip to content

Add io.pilot.primitive (Primitive — email for AI agents) + emailless signup scaffold step#86

Merged
Alexgodoroja merged 1 commit into
mainfrom
submit/io.pilot.primitive
Jul 14, 2026
Merged

Add io.pilot.primitive (Primitive — email for AI agents) + emailless signup scaffold step#86
Alexgodoroja merged 1 commit into
mainfrom
submit/io.pilot.primitive

Conversation

@Alexgodoroja

Copy link
Copy Markdown
Collaborator

What

Publishes io.pilot.primitivePrimitive, programmatic email infrastructure for AI agents — and adds the small scaffold feature it needs.

Scaffold: create signup step + free-plan help disclaimer

  • New no-broker signup step create: a single unauthenticated POST (static body, e.g. {terms_accepted:true}) that mints the API key and caches it — plus the provisioned inbox address — to $APP/secrets.json in one call. No email, no OTP, no broker. Complements the existing register/verify/broker/account steps.
  • requireKey preflight: an unauthenticated call soft-fails with exact activation instructions (call the signup method) instead of a raw 401. Once minted, the key is injected on every request via the byo ${TOKEN} header — the agent never handles it.
  • Methods can declare a gated reason; the generated <ns>.help renders those under a NOT AVAILABLE ON THE FREE PLAN disclaimer at the bottom of the output.
  • Mirrored across scaffold.Config, the publish.Submission model, validation, and ToConfig. New test TestCreateSignupGrantsAndCompiles (generates + compiles + checks grants/soft-fail/disclaimer).

Submission: submissions/io.pilot.primitive/submission.json

  • 110 methods over one byo HTTP backend (Authorization: Bearer ${PRIMITIVE_API_KEY}).
  • primitive.signup provisions a free account + managed *.primitive.email inbox in one call; every other method authenticates automatically.
  • 57 reachable on the free agent plan (account, inbox, domains, send/reply/batch, inbox listing/search/get/raw/attachments/conversation, threads, filters, endpoints, memories, webhook deliveries); 52 marked gated (Functions, Wake, x402 payments, custom domains, recipient routes, semantic search) — implemented and callable, labeled in help until the account is upgraded.

Testing

  • verify-submissionVERIFY OK (scaffolds + cross-compiles all 4 platforms + catalogue gate).
  • Full e2e in socket mode against live primitive: soft-fail → signup → key auto-injected → account/status reads, send A→B (SMTP 250), inbound list/get/conversation/raw/search, threaded reply via send_email, memories set/get/search/delete, filters + endpoints CRUD. Zero adapter bugs; gated families return the expected plan/entitlement errors.
  • go build ./... && go vet ./... && go test ./... all green; gofmt clean.

…laimer; submit io.pilot.primitive

Adds a new `create` signup step to the no-broker self-signup scaffold: a single
unauthenticated POST (with a static body, e.g. {terms_accepted:true}) that mints
an API key and caches it — and the provisioned address — to $APP/secrets.json in
one call, no email or OTP. The key is then injected on every request via the byo
${TOKEN} header; the agent never handles it. A `requireKey` preflight soft-fails
unauthenticated calls with activation instructions instead of a raw 401.

Methods can carry a `gated` reason; the generated <ns>.help renders those under a
"NOT AVAILABLE ON THE FREE PLAN" disclaimer at the bottom of the output.

Ships submissions/io.pilot.primitive/submission.json — Primitive's email API for
agents (110 methods): emailless signup, managed inbox, send/receive/reply/search,
memories, filters, endpoints, plus Functions/Wake/x402/custom-domains marked gated.
@Alexgodoroja
Alexgodoroja merged commit fa0133f into main Jul 14, 2026
7 checks passed
@Alexgodoroja
Alexgodoroja deleted the submit/io.pilot.primitive branch July 14, 2026 21:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant