Primitive
pilotctl appstore install io.pilot.primitiveAbout Primitive
Primitive gives an agent a real, working email identity with no SMTP credentials, no DNS, and no human in the loop. primitive.signup provisions a free account plus a managed *.primitive.email inbox in one call (no email, no code). The adapter caches the API key locally under ~/.pilot and injects it on every subsequent call automatically — the agent never sees, stores, or passes it. Call signup once; everything else authenticates as you.
## What you can do on the free plan - Send outbound mail, reply on-thread, and batch-send, with attachments and idempotency keys. - Receive at your managed inbox: list, get, search, download raw MIME + attachments, and follow conversations. Long-poll for new mail with ?since=<cursor>&wait=30. - Filter inbound mail, register webhook endpoints, and read inbox readiness. - Primitive Memories — durable JSON key-value state across turns, retries, and inbound messages.
## Auth model One step: primitive.signup. It mints a prim_ API key + a provisioned inbox, caches both locally, and the key is injected on every call thereafter. Idempotent — a host that already has a key keeps it. Any method called before signup soft-fails with exact activation instructions instead of erroring.
## Requires an upgrade Four families are marked in primitive.help under a free-plan disclaimer: Functions (hosted JavaScript on inbound mail), Wake schedules, x402 USDC payments over email (invite-only), and custom Domains. They ship implemented and callable, and return a plan/entitlement error until the account is upgraded at primitive.dev.
Plan & limits
Methods · 110
58 methods work on the free plan. The 52 below the divider need an account upgrade (paid plan, invite, or a verified custom domain).
primitive.signupprimitive.get_accountprimitive.update_accountexample{"spam_threshold": 10, "discard_content_on_webhook_confirmed": true}primitive.get_storage_statsprimitive.get_webhook_secretprimitive.rotate_webhook_secretprimitive.list_domainsprimitive.update_domainexample{"id": "<id>", "is_active": true, "spam_threshold": 10}primitive.delete_domainexample{"id": "<id>"}primitive.get_inbox_statusprimitive.list_emailsexample{"cursor": "<cursor>", "limit": 20, "domain_id": "<domain_id>", "status": "<status>", "search": "search terms", "date_from": "<date_from>", "date_to": "<date_to>"}primitive.search_emailsexample{"q": "search terms", "from": "you@your-inbox.primitive.email", "to": "someone@example.com", "subject": "Subject line", "body": "<body>", "domain_id": "<domain_id>", "reply_to_sent_email_id": "<reply_to_sent_email_id>"}primitive.get_emailexample{"id": "<id>"}primitive.delete_emailexample{"id": "<id>"}primitive.download_raw_emailexample{"id": "<id>", "token": "<token>"}primitive.download_attachmentsexample{"id": "<id>", "token": "<token>"}primitive.reply_to_emailexample{"id": "<id>", "body_text": "Plain-text body", "body_html": "<p>HTML body</p>", "from": "you@your-inbox.primitive.email", "wait": 30, "attachments": ["..."]}primitive.replay_email_webhooksexample{"id": "<id>"}primitive.discard_email_contentexample{"id": "<id>"}primitive.get_conversationexample{"id": "<id>"}primitive.list_endpointsprimitive.create_endpointexample{"kind": "http", "url": "https://example.com/webhook", "function_id": "<function_id>", "enabled": true, "domain_id": "<domain_id>", "rules": {"...": "..."}, "is_route_target": true}primitive.update_endpointexample{"id": "<id>", "url": "https://example.com/webhook", "enabled": true, "domain_id": "<domain_id>", "rules": {"...": "..."}}primitive.delete_endpointexample{"id": "<id>"}primitive.test_endpointexample{"id": "<id>"}primitive.list_filtersprimitive.create_filterexample{"type": "whitelist", "pattern": "*@example.com", "domain_id": "<domain_id>"}primitive.update_filterexample{"id": "<id>", "enabled": true}primitive.delete_filterexample{"id": "<id>"}primitive.list_deliveriesexample{"cursor": "<cursor>", "limit": 20, "email_id": "<email_id>", "status": "<status>", "date_from": "<date_from>", "date_to": "<date_to>"}primitive.replay_deliveryexample{"id": "<id>"}primitive.get_send_permissionsprimitive.send_emailexample{"from": "you@your-inbox.primitive.email", "to": "someone@example.com", "subject": "Subject line", "body_text": "Plain-text body", "body_html": "<p>HTML body</p>", "in_reply_to": "<message-id>", "references": ["..."]}primitive.list_sent_emailsexample{"cursor": "<cursor>", "limit": 20, "status": "<status>", "request_id": "<request_id>", "idempotency_key": "<idempotency_key>", "date_from": "<date_from>", "date_to": "<date_to>"}primitive.get_sent_emailexample{"id": "<id>"}primitive.get_threadexample{"id": "<id>"}primitive.set_memoryexample{"key": "namespace/key", "value": {"any": "json"}, "scope": {"...": "..."}, "ttl_seconds": 10, "expires_at": "<expires_at>", "clear_ttl": true, "if_absent": true}primitive.get_memoryexample{"key": "namespace/key", "scope_type": "<scope_type>", "scope_id": "<scope_id>"}primitive.delete_memoryexample{"key": "namespace/key", "scope_type": "<scope_type>", "scope_id": "<scope_id>", "if_version": "<if_version>"}primitive.search_memoriesexample{"prefix": "search terms", "cursor": "<cursor>", "limit": 20, "include_value": "<include_value>", "updated_after": "<updated_after>", "updated_before": "<updated_before>", "scope_type": "<scope_type>"}primitive.list_registriesprimitive.create_registryexample{"slug": "<slug>", "name": "<name>", "description": "<description>", "is_public": true, "publish_policy": "<publish_policy>"}primitive.get_registryexample{"slug": "<slug>"}primitive.update_registryexample{"slug": "<slug>", "name": "<name>", "description": "<description>", "is_public": true, "publish_policy": "<publish_policy>"}primitive.delete_registryexample{"slug": "<slug>"}primitive.list_registry_agentsexample{"slug": "<slug>", "limit": 20, "cursor": "<cursor>"}primitive.publish_agentexample{"slug": "<slug>", "address": "someone@example.com", "handle": "<handle>", "display_name": "<display_name>", "endpoint_id": "<endpoint_id>", "title": "<title>", "description": "<description>"}primitive.resolve_registry_handleexample{"slug": "<slug>", "handle": "<handle>"}primitive.unpublish_agentexample{"slug": "<slug>", "handle": "<handle>"}primitive.list_registry_requestsexample{"slug": "<slug>", "limit": 20}primitive.decide_registry_requestexample{"slug": "<slug>", "id": "<id>", "decision": "<decision>"}primitive.define_agentexample{"address": "someone@example.com", "display_name": "<display_name>", "endpoint_id": "<endpoint_id>", "title": "<title>", "description": "<description>", "tags": ["..."]}primitive.get_agentexample{"address": "someone@example.com"}primitive.list_templatesexample{"q": "search terms", "tag": "<tag>", "cursor": "<cursor>", "limit": 20}primitive.get_templateexample{"id": "<id>"}primitive.send_mail_batchexample{"messages": ["..."]}primitive.askexample{"q": "search terms", "prefer": {"...": "..."}}primitive.get_healthprimitive.add_domainupgradeexample{"domain": "<domain>", "confirmed": true, "outbound": true}primitive.verify_domainupgradeexample{"id": "<id>"}primitive.download_domain_zone_fileupgradeexample{"id": "<id>", "outbound_only": true}primitive.list_wake_schedulesupgradeprimitive.create_wake_scheduleupgradeexample{"from_address": "<from_address>", "target_address": "<target_address>", "command": "<command>", "cron_expr": "<cron_expr>", "args": {"...": "..."}, "timezone": "<timezone>", "note": "<note>"}primitive.get_wake_scheduleupgradeexample{"id": "<id>"}primitive.update_wake_scheduleupgradeexample{"id": "<id>", "enabled": true, "command": "<command>", "args": {"...": "..."}, "cron_expr": "<cron_expr>", "timezone": "<timezone>", "from_address": "<from_address>"}primitive.delete_wake_scheduleupgradeexample{"id": "<id>"}primitive.run_wake_scheduleupgradeexample{"id": "<id>"}primitive.list_wake_authorizationsupgradeexample{"recipient_endpoint_id": "<recipient_endpoint_id>"}primitive.create_wake_authorizationupgradeexample{"recipient_endpoint_id": "<recipient_endpoint_id>", "allowed_sender_domain": "<allowed_sender_domain>", "allowed_sender_address": "<allowed_sender_address>", "allowed_commands": ["..."], "note": "<note>"}primitive.update_wake_authorizationupgradeexample{"id": "<id>", "enabled": true}primitive.delete_wake_authorizationupgradeexample{"id": "<id>"}primitive.list_wake_dispatchesupgradeexample{"limit": 20}primitive.list_routesupgradeprimitive.create_routeupgradeexample{"match_type": "to", "pattern": "*@example.com", "endpoint_id": "<endpoint_id>", "function_id": "<function_id>", "domain_id": "<domain_id>", "priority": 0, "enabled": true}primitive.reorder_routesupgradeexample{"updates": ["..."]}primitive.simulate_routeupgradeexample{"recipient": "someone@example.com", "event_type": "<event_type>"}primitive.update_routeupgradeexample{"id": "<id>", "match_type": "to", "pattern": "*@example.com", "endpoint_id": "<endpoint_id>", "domain_id": "<domain_id>", "priority": 0, "enabled": true}primitive.delete_routeupgradeexample{"id": "<id>"}primitive.semantic_searchupgradeexample{"query": "search terms", "mode": "<mode>", "corpus": ["..."], "search_in": ["..."], "exclude": ["..."], "date_from": "<date_from>", "date_to": "<date_to>"}primitive.list_functionsupgradeprimitive.create_functionupgradeexample{"name": "<name>", "code": "<code>", "sourceMap": "<sourceMap>", "files": {"...": "..."}}primitive.get_functionupgradeexample{"id": "<id>"}primitive.update_functionupgradeexample{"id": "<id>", "code": "<code>", "sourceMap": "<sourceMap>", "files": {"...": "..."}}primitive.delete_functionupgradeexample{"id": "<id>"}primitive.test_functionupgradeexample{"id": "<id>", "local_part": "<local_part>"}primitive.get_function_test_run_traceupgradeexample{"id": "<id>", "run_id": "<run_id>"}primitive.get_org_routing_topologyupgradeprimitive.get_function_routingupgradeexample{"id": "<id>"}primitive.set_function_routeupgradeexample{"id": "<id>", "target": {"...": "..."}, "takeover": true}primitive.unset_function_routeupgradeexample{"id": "<id>"}primitive.list_function_secretsupgradeexample{"id": "<id>"}primitive.create_function_secretupgradeexample{"id": "<id>", "key": "namespace/key", "value": {"any": "json"}}primitive.set_function_secretupgradeexample{"id": "<id>", "key": "namespace/key", "value": {"any": "json"}}primitive.delete_function_secretupgradeexample{"id": "<id>", "key": "namespace/key"}primitive.list_org_secretsupgradeprimitive.create_org_secretupgradeexample{"key": "namespace/key", "value": {"any": "json"}}primitive.set_org_secretupgradeexample{"key": "namespace/key", "value": {"any": "json"}}primitive.delete_org_secretupgradeexample{"key": "namespace/key"}primitive.list_function_logsupgradeexample{"id": "<id>", "limit": 20, "cursor": "<cursor>"}primitive.register_payout_addressupgradeexample{"address": "someone@example.com", "network": "<network>", "signature": "<signature>", "issued_at": "<issued_at>", "label": "<label>"}primitive.list_payout_addressesupgradeprimitive.create_email_challengeupgradeexample{"from": "you@your-inbox.primitive.email", "to": "someone@example.com", "amount": "<amount>", "network": "<network>", "expires_in": 10, "resource": "<resource>", "description": "<description>"}primitive.create_challengeupgradeexample{"amount": "<amount>", "network": "<network>", "payer_org": "<payer_org>", "expires_in": 10, "resource": "<resource>", "description": "<description>"}primitive.get_challengeupgradeexample{"id": "<id>"}primitive.pay_challengeupgradeexample{"id": "<id>", "payment": {"...": "..."}}primitive.get_spend_policyupgradeprimitive.update_spend_policyupgradeexample{"paused": true, "max_per_payment": "<max_per_payment>", "max_per_day": "<max_per_day>", "allowlist": ["..."]}primitive.list_declined_paymentsupgradeprimitive.install_templateupgradeexample{"id": "<id>", "address": "someone@example.com", "domain": "<domain>", "variables": {"...": "..."}, "secrets": {"...": "..."}}primitive.get_template_installupgradeexample{"id": "<id>"}What’s New
- Initial release — Primitive's email API for agents over one byo HTTPS app: 110 methods + primitive.help.
- Emailless one-call signup (primitive.signup): mints a prim_ API key + a managed *.primitive.email inbox with no email or code; the key is cached locally and injected on every call automatically.
- Full email lifecycle on the free plan: send/reply/batch, inbound list/get/search/raw/attachments/conversations, threads, filters, webhook endpoints, and durable Memories.
- Functions, Wake schedules, x402 payments, and custom domains are implemented and marked gated until the account is upgraded.