{"asOf":"2026-10-03","doesNotChangeDepotPicks":true,"doesNotChangePriceSort":true,"doesNotRescore":true,"caps":{"needs":6,"freePerNeed":3,"caseStudies":3},"class":{"id":"personal-assistant","name":"Personal assistant","definition":"Acts for one person across sessions, keeps that person's memory separate, and waits before sending or booking.","needs":{"jtbdIds":["calendar-scheduling-tools","transactional-email","sms","cross-session-user-memory","episodic-long-term-memory","agent-push-notifications","realtime-agent-channel"],"freeKinds":["local_runtime","free_docs"],"capabilityTags":["memory","agents"],"plain":["Confirmation before a message or a calendar write","A memory store scoped to one user"]},"failureModeIds":["identity-confusion","context-overflow","confirmation-skip","stale-retrieval","prompt-injection","instruction-drift"],"exampleTasks":["Draft a calendar hold and wait for confirmation","Remember a preference for this user only"]},"needsConsidered":["calendar-scheduling-tools","transactional-email","sms","cross-session-user-memory","episodic-long-term-memory","agent-push-notifications"],"needsOmitted":["realtime-agent-channel"],"jobs":[{"jtbdId":"calendar-scheduling-tools","decide":{"available":true,"unavailableReason":null,"providerId":"composio","scoreAsOf":"2026-10-19","scoreAgeDays":8,"scoreStale":false,"runnerUpId":"nango","cite":"Depot Pick for calendar-scheduling-tools: composio (asOf 2026-10-19). See GET /api/jtbds/calendar-scheduling-tools + GET /api/methodology.","citePath":"/api/jtbds/calendar-scheduling-tools"},"quote":{"available":true,"unavailableReason":null,"cheapest":null,"recommendedWorkloadQuote":{"providerId":"composio","providerName":"Composio","skuId":"composio-hobby","item":"Hobby","plan":"Hobby — Hard-capped","unit":"usd_per_month","amountUsd":0,"outputSkuId":null,"outputItem":null,"outputAmountUsd":null,"outputUnit":null,"sourceUrl":"https://composio.dev/pricing","asOf":"2026-10-03","pricingLastVerifiedAt":"2026-10-27","isFlagshipForJob":false,"differsFromFloorCheapest":false,"representativeQuote":{"skuId":"composio-hobby","item":"Hobby","plan":"Hobby — Hard-capped","amountUsd":0,"inputOrUnitUsd":0,"unit":"usd_per_month","outputUsd":null,"outputUnit":null,"sourceUrl":"https://composio.dev/pricing","asOf":"2026-10-03"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0,"totalUsd":0,"estimatedTotalUsd":0,"perTaskUsd":0,"estimatedCostPerTaskUsd":0,"formula":"Monthly base plan $0/mo covering 1,000 tasks (1.15x overhead buffer)","assumptions":"Monthly subscription plan amortized over 1,000 tasks/month."}},"representativeQuote":{"skuId":"composio-hobby","item":"Hobby","plan":"Hobby — Hard-capped","amountUsd":0,"inputOrUnitUsd":0,"unit":"usd_per_month","outputUsd":null,"outputUnit":null,"sourceUrl":"https://composio.dev/pricing","asOf":"2026-10-03"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0,"totalUsd":0,"estimatedTotalUsd":0,"perTaskUsd":0,"estimatedCostPerTaskUsd":0,"formula":"Monthly base plan $0/mo covering 1,000 tasks (1.15x overhead buffer)","assumptions":"Monthly subscription plan amortized over 1,000 tasks/month."},"reason":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.","priceWinnerNote":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[],"freeMatch":"none"},{"jtbdId":"transactional-email","decide":{"available":true,"unavailableReason":null,"providerId":"resend","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"postmark","cite":"Depot Pick for transactional-email: resend (asOf 2026-09-14). See GET /api/jtbds/transactional-email + GET /api/methodology.","citePath":"/api/jtbds/transactional-email"},"quote":{"available":true,"unavailableReason":null,"cheapest":{"providerId":"amazon-ses","slug":"amazon-ses","name":"Amazon SES","skuId":"amazon-ses-outbound-a-la-carte","sku":"Outbound email (à la carte) transactional","item":"Outbound email (à la carte) transactional","plan":"Outbound email (à la carte) transactional — À la carte outbound: $0","isFloorPrice":false,"floorWarning":null,"skuKind":"email_1k","unit":"usd_per_1k_emails","amountUsd":0.1,"comparison":"min sourced usd_per_1k_emails whose source label is not a marketing-contact or marketing-send SKU; lowest per-1k tier per provider; not quality-adjusted; monthly plans were not ranked","usdPerMillionInputTokens":null,"sourceUrl":"https://aws.amazon.com/ses/pricing/","asOf":"2026-10-21"},"recommendedWorkloadQuote":{"providerId":"resend","providerName":"Resend","skuId":"resend-tx-overage-0-46","item":"Transactional overage Scale 2.5M","plan":"Transactional overage Scale 2.5M — Per 1,000 emails beyond included volume on Scale 2,500,000","unit":"usd_per_1k_emails","amountUsd":0.46,"outputSkuId":null,"outputItem":null,"outputAmountUsd":null,"outputUnit":null,"sourceUrl":"https://resend.com/pricing.md","asOf":"2026-10-27","pricingLastVerifiedAt":"2026-10-27","isFlagshipForJob":false,"differsFromFloorCheapest":false,"representativeQuote":{"skuId":"resend-tx-overage-0-46","item":"Transactional overage Scale 2.5M","plan":"Transactional overage Scale 2.5M — Per 1,000 emails beyond included volume on Scale 2,500,000","amountUsd":0.46,"inputOrUnitUsd":0.46,"unit":"usd_per_1k_emails","outputUsd":null,"outputUnit":null,"sourceUrl":"https://resend.com/pricing.md","asOf":"2026-10-27"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0.46,"totalUsd":0.529,"estimatedTotalUsd":0.529,"perTaskUsd":0.000529,"estimatedCostPerTaskUsd":0.000529,"formula":"(1,000 calls @ $0.46/1k_emails) * 1.15 overhead","assumptions":"1,000 tasks @ 1 request/task with 1.15x retry/tool-call overhead."}},"representativeQuote":{"skuId":"resend-tx-overage-0-46","item":"Transactional overage Scale 2.5M","plan":"Transactional overage Scale 2.5M — Per 1,000 emails beyond included volume on Scale 2,500,000","amountUsd":0.46,"inputOrUnitUsd":0.46,"unit":"usd_per_1k_emails","outputUsd":null,"outputUnit":null,"sourceUrl":"https://resend.com/pricing.md","asOf":"2026-10-27"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0.46,"totalUsd":0.529,"estimatedTotalUsd":0.529,"perTaskUsd":0.000529,"estimatedCostPerTaskUsd":0.000529,"formula":"(1,000 calls @ $0.46/1k_emails) * 1.15 overhead","assumptions":"1,000 tasks @ 1 request/task with 1.15x retry/tool-call overhead."},"reason":null,"priceWinnerNote":"Pick is not a price winner. resend matching USD per 1k emails is 0.46; cheapest among candidates is amazon-ses at 0.1."},"pickIsNotPriceWinner":true,"freeResources":[{"id":"postmark-free-developer","name":"Postmark Free (Developer) plan","kind":"free_email","cost":"free","substitutable":true,"sourceUrl":"https://postmarkapp.com/pricing"},{"id":"resend-free-plan","name":"Resend Free plan","kind":"free_email","cost":"free","substitutable":true,"sourceUrl":"https://resend.com/pricing"}],"freeMatch":"jtbd"},{"jtbdId":"sms","decide":{"available":true,"unavailableReason":null,"providerId":"twilio","scoreAsOf":"2026-10-19","scoreAgeDays":8,"scoreStale":false,"runnerUpId":"courier","cite":"Depot Pick for sms: twilio (asOf 2026-10-19). See GET /api/jtbds/sms + GET /api/methodology.","citePath":"/api/jtbds/sms"},"quote":{"available":true,"unavailableReason":null,"cheapest":{"providerId":"twilio","slug":"twilio","name":"Twilio","skuId":"twilio-sms-us-long-code-outbound","sku":"US SMS outbound, long code","item":"US SMS outbound, long code","plan":"US SMS outbound, long code — Pay-as-you-go, charged per segment","isFloorPrice":false,"floorWarning":null,"skuKind":"sms","unit":"usd_per_sms_segment","amountUsd":0.0083,"comparison":"min sourced pay-as-you-go US outbound SMS among candidates; carrier surcharges and registration fees are not included; per-segment and per-SMS were not mixed; not quality-adjusted","usdPerMillionInputTokens":null,"sourceUrl":"https://www.twilio.com/en-us/sms/pricing/us","asOf":"2026-10-19"},"recommendedWorkloadQuote":{"providerId":"twilio","providerName":"Twilio","skuId":"twilio-sms-us-long-code-outbound","item":"US SMS outbound, long code","plan":"US SMS outbound, long code — Pay-as-you-go, charged per segment","unit":"usd_per_sms_segment","amountUsd":0.0083,"outputSkuId":null,"outputItem":null,"outputAmountUsd":null,"outputUnit":null,"sourceUrl":"https://www.twilio.com/en-us/sms/pricing/us","asOf":"2026-10-19","pricingLastVerifiedAt":"2026-10-19","isFlagshipForJob":true,"differsFromFloorCheapest":false,"representativeQuote":{"skuId":"twilio-sms-us-long-code-outbound","item":"US SMS outbound, long code","plan":"US SMS outbound, long code — Pay-as-you-go, charged per segment","amountUsd":0.0083,"inputOrUnitUsd":0.0083,"unit":"usd_per_sms_segment","outputUsd":null,"outputUnit":null,"sourceUrl":"https://www.twilio.com/en-us/sms/pricing/us","asOf":"2026-10-19"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0.0083,"totalUsd":0.0095,"estimatedTotalUsd":0.0095,"perTaskUsd":0.00001,"estimatedCostPerTaskUsd":0.00001,"formula":"$0.0083 (usd_per_sms_segment) * 1.15 overhead","assumptions":"1,000 tasks in job native unit with 1.15x retry overhead."}},"representativeQuote":{"skuId":"twilio-sms-us-long-code-outbound","item":"US SMS outbound, long code","plan":"US SMS outbound, long code — Pay-as-you-go, charged per segment","amountUsd":0.0083,"inputOrUnitUsd":0.0083,"unit":"usd_per_sms_segment","outputUsd":null,"outputUnit":null,"sourceUrl":"https://www.twilio.com/en-us/sms/pricing/us","asOf":"2026-10-19"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0.0083,"totalUsd":0.0095,"estimatedTotalUsd":0.0095,"perTaskUsd":0.00001,"estimatedCostPerTaskUsd":0.00001,"formula":"$0.0083 (usd_per_sms_segment) * 1.15 overhead","assumptions":"1,000 tasks in job native unit with 1.15x retry overhead."},"reason":null,"priceWinnerNote":"Only 1 candidate has a matching USD per SMS segment; nothing was compared, so pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[],"freeMatch":"none"},{"jtbdId":"cross-session-user-memory","decide":{"available":true,"unavailableReason":null,"providerId":"memobase","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"mem0","cite":"Depot Pick for cross-session-user-memory: memobase (asOf 2026-09-14). See GET /api/jtbds/cross-session-user-memory + GET /api/methodology.","citePath":"/api/jtbds/cross-session-user-memory"},"quote":{"available":true,"unavailableReason":null,"cheapest":null,"recommendedWorkloadQuote":null,"representativeQuote":null,"estimatedTaskCost":null,"reason":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.","priceWinnerNote":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[{"id":"mem0","name":"Mem0","kind":"dev_tool","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/mem0ai/mem0/main/LICENSE"}],"freeMatch":"jtbd"},{"jtbdId":"episodic-long-term-memory","decide":{"available":true,"unavailableReason":null,"providerId":"zep","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"letta","cite":"Depot Pick for episodic-long-term-memory: zep (asOf 2026-09-14). See GET /api/jtbds/episodic-long-term-memory + GET /api/methodology.","citePath":"/api/jtbds/episodic-long-term-memory"},"quote":{"available":true,"unavailableReason":null,"cheapest":null,"recommendedWorkloadQuote":null,"representativeQuote":null,"estimatedTaskCost":null,"reason":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.","priceWinnerNote":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[{"id":"graphiti","name":"Graphiti","kind":"dev_tool","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/getzep/graphiti/main/LICENSE"}],"freeMatch":"jtbd"},{"jtbdId":"agent-push-notifications","decide":{"available":true,"unavailableReason":null,"providerId":"onesignal","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"knock","cite":"Depot Pick for agent-push-notifications: onesignal (asOf 2026-09-14). See GET /api/jtbds/agent-push-notifications + GET /api/methodology.","citePath":"/api/jtbds/agent-push-notifications"},"quote":{"available":true,"unavailableReason":null,"cheapest":null,"recommendedWorkloadQuote":{"providerId":"onesignal","providerName":"OneSignal","skuId":"onesignal-free","item":"Free","plan":"Free — Self-service","unit":"usd_per_month","amountUsd":0,"outputSkuId":null,"outputItem":null,"outputAmountUsd":null,"outputUnit":null,"sourceUrl":"https://onesignal.com/pricing","asOf":"2026-10-03","pricingLastVerifiedAt":"2026-10-27","isFlagshipForJob":false,"differsFromFloorCheapest":false,"representativeQuote":{"skuId":"onesignal-free","item":"Free","plan":"Free — Self-service","amountUsd":0,"inputOrUnitUsd":0,"unit":"usd_per_month","outputUsd":null,"outputUnit":null,"sourceUrl":"https://onesignal.com/pricing","asOf":"2026-10-03"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0,"totalUsd":0,"estimatedTotalUsd":0,"perTaskUsd":0,"estimatedCostPerTaskUsd":0,"formula":"Monthly base plan $0/mo covering 1,000 tasks (1.15x overhead buffer)","assumptions":"Monthly subscription plan amortized over 1,000 tasks/month."}},"representativeQuote":{"skuId":"onesignal-free","item":"Free","plan":"Free — Self-service","amountUsd":0,"inputOrUnitUsd":0,"unit":"usd_per_month","outputUsd":null,"outputUnit":null,"sourceUrl":"https://onesignal.com/pricing","asOf":"2026-10-03"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0,"totalUsd":0,"estimatedTotalUsd":0,"perTaskUsd":0,"estimatedCostPerTaskUsd":0,"formula":"Monthly base plan $0/mo covering 1,000 tasks (1.15x overhead buffer)","assumptions":"Monthly subscription plan amortized over 1,000 tasks/month."},"reason":"Nothing was compared. usd_per_mau and usd_per_web_push_subscriber were not ranked against providers with no sourced price. Monthly plans are not a unit price (plan_not_a_unit_price). cheapest stays null. pickIsPriceWinner is null.","priceWinnerNote":"Nothing was compared. usd_per_mau and usd_per_web_push_subscriber were not ranked against providers with no sourced price. Monthly plans are not a unit price (plan_not_a_unit_price). cheapest stays null. pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[{"id":"ntfy","name":"ntfy","kind":"dev_tool","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/binwiederhier/ntfy/main/LICENSE"}],"freeMatch":"jtbd"}],"failures":[{"id":"identity-confusion","name":"Identity confusion","detection":"Bind every tool call to a user or tenant id. Refuse the call if that id changed mid-task. For a public bot, the operator owns the words the bot shows."},{"id":"context-overflow","name":"Context overflow","detection":"If the input exceeds the window, say so and retrieve a narrower slice. Do not answer from a truncated head as if it were the whole source."},{"id":"confirmation-skip","name":"Confirmation skip","detection":"Gate those tool names on an approval id recorded before the call. A missing approval is a failure even if the downstream tool returns success."},{"id":"stale-retrieval","name":"Stale retrieval","detection":"Store the source URL and the time it was fetched. If a newer canonical page exists, or two stored sources disagree, do not answer from the older one."},{"id":"prompt-injection","name":"Prompt injection","detection":"Compare each tool call to the original user task. If the call only makes sense given text that arrived from a fetched page, file, or message, stop and ask. Record which source the instruction came from. This catalog does not store payloads or attack steps."},{"id":"instruction-drift","name":"Instruction drift","detection":"Restate the stop condition in the trace. End the run when it is met. Review long traces for steps that do not serve the original task."}],"failuresOmittedBecauseMissing":[],"caseStudies":[{"id":"gaia-2023","title":"GAIA: a benchmark for General AI Assistants","sourceUrl":"https://arxiv.org/abs/2311.12983","year":2023,"studyKind":"capability_ceiling"},{"id":"openai-operator-2025","title":"Introducing Operator","sourceUrl":"https://openai.com/index/introducing-operator/","year":2025,"studyKind":"vendor_writeup"},{"id":"appworld-2024","title":"AppWorld: A Controllable World of Apps and People for Benchmarking Interactive Coding Agents","sourceUrl":"https://arxiv.org/abs/2407.18901","year":2024,"studyKind":"capability_ceiling"}],"caseStudiesRelated":5,"caseStudiesOmitted":2,"caseStudiesReason":null,"links":{"kit":"/api/kit?class=personal-assistant","page":"/agents/kit/personal-assistant","agentClass":"/api/agent-classes/personal-assistant","failures":"/api/failures","caseStudies":"/api/case-studies?class=personal-assistant"},"recommendation":{"mode":"default"},"stackContext":{"host":null,"framework":null,"repo":null,"lang":null,"existing":[],"volume":null,"sender":null,"detectedFromTask":[]},"contextAdvice":[],"firstActions":["https://getagentdepot.com/api/hub","https://getagentdepot.com/api/decide?jtbd=calendar-scheduling-tools","https://getagentdepot.com/api/quote?jtbd=calendar-scheduling-tools","https://getagentdepot.com/api/kit?class=personal-assistant","https://getagentdepot.com/api/failures"],"honesty":["Picks are the current Depot Pick from GET /api/decide. This kit does not rescore.","Cheapest SKU is copied from GET /api/quote for that job. Input and output are not blended. A chat SKU is not borrowed for a non-chat job. If quote.cheapest is null, there is no matching sourced price.","pickIsNotPriceWinner is true only when that job's Depot Pick and cheapest matching SKU both exist and the quote says the pick is not the price winner. If either is missing, the field is false.","freeResources are existing /api/free items whose jtbdIds include that job, up to 3, sorted by id. If none list the job, freeResources is [] and freeMatch is none. Kind, provider, and docs are not fallbacks. Free does not change the pick.","firstActions are endpoint URLs for this class: hub, decide for the first listed need, quote for that need, this kit, and /api/failures. No other step is added.","Failures are the modes already listed on the class. Case studies are the first 3 related studies in catalog order, with the source URL already stored. Omitted studies stay on GET /api/case-studies?class=."]}