Update to Primitive
Snapshot Oct 24, 2026 · 12:52 UTC · version 2.1.0
Package or technical metadata updated
Package or technical metadata updated
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Up to 3 plugins free · no card required.
All fields and original values.
These are saved file metadata. Open a changed file to read its text edits.
Package file
Sep 30, 2026 · 22:49 UTC
9fd76be776b95e6f2900f2cd47c0d3d9badb6f5ed0bfc98768a1f8ca25b80e9a
Oct 24, 2026 · 12:52 UTC
7d9deab63564b6bbc8439a613e17a88ec7ac0c6eaf56869551cda6471bbcec88
Package file
Sep 30, 2026 · 22:49 UTC
127
Oct 24, 2026 · 12:52 UTC
101
Package file
Sep 30, 2026 · 22:49 UTC
{"sha256":"eeea7da82c7358ef1f97c32d9895df74a6f3fad7aca4aa65d53b61393bc20a98","size":1246}
Oct 24, 2026 · 12:52 UTC
Not present
Package file
Sep 30, 2026 · 22:49 UTC
Not present
Oct 24, 2026 · 12:52 UTC
{"sha256":"54ac194730cffe6ad7aad3c7674c25e43e585de068a3b387649050298b679cae","size":98681}
Compare saved observations
Download comparison JSONChanged files
Choose a file to see its text changes. Binary or large files show metadata only.
mcp.json →
plugin.json
− removed · + added
--- before +++ after @@ -0,0 +1,103 @@ +{ + "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", + "name": "app-6a25e1d409008191a30d80366aaad5e5", + "version": "2.1.0", + "description": "Email for AI agents: read, search, send, and reply to email in a Primitive inbox, and wait for the reply in the same turn.", + "author": { + "name": "Primitive", + "url": "https://www.primitive.dev" + }, + "homepage": "https://www.primitive.dev", + "keywords": [ + "email", + "inbox", + "agents", + "send email", + "reply" + ], + "extensions": { + "com.openai": { + "interface": { + "displayName": "Primitive", + "shortDescription": "Email for AI agents", + "longDescription": "Primitive gives ChatGPT a real email inbox. Create a managed inbox address with no signup form, or connect an existing Primitive account. Check whether the inbox and outbound sending are ready, list and search received email, open a message or its whole conversation, read text attachments, send new email, and reply in thread. When you send and expect an answer, Primitive waits for the reply and returns it in the same turn, and says whether the reply came from the person you wrote to.\n\nPrimitive only accesses email in the connected Primitive account. A new account can send only to the recipients it lists until it is verified further. Sending and replying always need your confirmation. Domain, webhook, and filter management are not part of this app.", + "developerName": "Primitive", + "category": "Developer Tools", + "capabilities": [ + "Read email", + "Search email", + "Send email", + "Reply to email" + ], + "websiteURL": "https://www.primitive.dev", + "supportURL": "https://www.primitive.dev/contact", + "privacyPolicyURL": "https://www.primitive.dev/privacy", + "termsOfServiceURL": "https://www.primitive.dev/terms", + "defaultPrompt": [ + "Is my Primitive inbox ready to receive email?", + "Show my 10 most recent Primitive emails.", + "Find emails from support@example.com about billing." + ], + "composerIcon": "./assets/icon.png", + "logo": "./assets/logo.png" + }, + "review": { + "test_cases": { + "positive": [ + { + "description": "Show the authenticated Primitive account summary.", + "prompt": "Show my Primitive account status and onboarding state.", + "tools_triggered": "getAccount", + "expected_behavior": "Returns the account summary, including plan and onboarding state, without changing account data." + }, + { + "description": "Check inbound setup readiness before guiding configuration.", + "prompt": "Is my Primitive inbox ready to receive agent email?", + "tools_triggered": "getInboxStatus", + "expected_behavior": "Returns a readiness summary covering domains, routes, deployed Functions, and recent inbound activity." + }, + { + "description": "Search inbound messages with sender and subject filters.", + "prompt": "Find inbound Primitive emails from support@example.com with billing in the subject.", + "tools_triggered": "searchEmails", + "expected_behavior": "Returns matching inbound messages, or a clear empty result if none match." + }, + { + "description": "Open the most recent inbound email and read the conversation it belongs to.", + "prompt": "Open my most recent Primitive email and show me the whole conversation.", + "tools_triggered": "listEmails, getEmail, getConversation", + "expected_behavior": "Finds the latest inbound email, shows its sender, subject and text, then returns every message in its thread oldest first." + }, + { + "description": "Send a confirmed outbound email from the account's own inbox address.", + "prompt": "Send an email to teammate@example.com with subject Status update and body: The inbox test passed. I confirm this should be sent.", + "tools_triggered": "sendEmail", + "expected_behavior": "Sends the confirmed email from the account's managed inbox address and returns the delivery outcome, or explains which recipients the account can reach if this one is not allowed." + } + ], + "negative": [ + { + "description": "Do not trigger for unrelated weather requests.", + "prompt": "What is the weather in San Francisco tomorrow?", + "expected_behavior": "The app is not invoked because the request is unrelated to Primitive email." + }, + { + "description": "Do not use Primitive for non-Primitive inboxes.", + "prompt": "Search my Gmail inbox for messages from my bank.", + "expected_behavior": "The app is not invoked because it only accesses email in the user's Primitive account." + }, + { + "description": "Do not send email without the required details and confirmation.", + "prompt": "Send a quick email to my teammate.", + "expected_behavior": "The assistant asks for the recipient, subject, body, and confirmation before invoking a sending tool." + } + ] + } + }, + "publication": { + "release_notes": "Each MCP endpoint now runs only the tools it lists, and the server instructions name only those tools. Adds email search, conversation and attachment reads, sent-email reads, and waiting for a reply in the same turn." + }, + "apps": "./.app.json" + } + } +}
Full technical diff · 7 changed fields
changed /files/.app.json/sha256
"9fd76be776b95e6f2900f2cd47c0d3d9badb6f5ed0bfc98768a1f8ca25b80e9a"
"7d9deab63564b6bbc8439a613e17a88ec7ac0c6eaf56869551cda6471bbcec88"
changed /files/.app.json/size
127
101
removed /files/.codex-plugin~1plugin.json
{
"sha256": "eeea7da82c7358ef1f97c32d9895df74a6f3fad7aca4aa65d53b61393bc20a98",
"size": 1246
}Field is absent
added /files/assets~1icon.png
Field was absent
{
"sha256": "54ac194730cffe6ad7aad3c7674c25e43e585de068a3b387649050298b679cae",
"size": 98681
}added /files/assets~1logo.png
Field was absent
{
"sha256": "54ac194730cffe6ad7aad3c7674c25e43e585de068a3b387649050298b679cae",
"size": 98681
}added /files/mcp.json
Field was absent
{
"sha256": "50ecad6c8e275bb774ea3d8d64d48e897957a9cc53d16d470fa76691ceb2f10a",
"size": 197
}added /files/plugin.json
Field was absent
{
"sha256": "12c0d62f91e8a979147691595efc7d4b7674d66990bd5eda90903488663885c3",
"size": 5757
}Full snapshot data
{
"files": {
".app.json": {
"sha256": "7d9deab63564b6bbc8439a613e17a88ec7ac0c6eaf56869551cda6471bbcec88",
"size": 101
},
"assets/icon.png": {
"sha256": "54ac194730cffe6ad7aad3c7674c25e43e585de068a3b387649050298b679cae",
"size": 98681
},
"assets/logo.png": {
"sha256": "54ac194730cffe6ad7aad3c7674c25e43e585de068a3b387649050298b679cae",
"size": 98681
},
"mcp.json": {
"sha256": "50ecad6c8e275bb774ea3d8d64d48e897957a9cc53d16d470fa76691ceb2f10a",
"size": 197
},
"plugin.json": {
"sha256": "12c0d62f91e8a979147691595efc7d4b7674d66990bd5eda90903488663885c3",
"size": 5757
}
}
}SHA-256 of public snapshot: 3132984695bdfdcc192f4b2355d7d68fc8d232e378903b33bbfadc9263fd693d