A cold email outreach agent with AI-powered email drafting, web scraping, contact management, and scheduled sending capabilities
Email Agent exhibits significant definition quality gaps. Tool names are verb-based (draft_email, send_email, etc.), which is good, but descriptions are inconsistent, some are adequate (draft_email: 127 chars), others are vague (update_status: 56 chars, below the 10-char minimum for meaningful context). Critical issue: input schemas are NOT visible in the provided source code. The backend/app.py excerpt shows Pydantic request models (ContactPayload, SendBody, etc.) but does NOT show explicit tool registration with JSON Schema input definitions. Parameters like 'config' and 'db' are passed as objects but lack type definitions and field descriptions. Error handling is absent, no recovery guidance, no categorization of retryable vs. fatal errors. Irreversible operations (send_email, process_scheduled_sends) lack confirmation or dry-run patterns. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) detected.
Create contacts and AI drafts for each entry in a batch
Check for replies to sent emails via Gmail MCP and optionally auto-reply
Draft an email using AI providers (Groq, Gemini, or OpenAI) based on contact information and optional resume data
Send any drafts whose scheduled_at time has passed
Save a contact with its AI-generated draft to the database
Assign a send time to each draft, optionally staggered by minutes
No visible input schemas in source code. Tool definitions appear inferred from Pydantic models (ContactPayload, SendBody) rather than explicitly registered with JSON Schema.
Irreversible operations (send_email, process_scheduled_sends) lack confirmation or dry-run patterns. Agents can accidentally send emails without a safety gate.
No error handling guidance. Tools do not return actionable error messages or recovery hints. E.g., if send_email fails, the agent has no guidance on retry strategy or root cause.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 34 | 2026-07-28+ | v2 |
Send an email via Gmail MCP client with optional resume attachment
Update the status of a contact/draft record
Parameter descriptions are generic or missing. 'config' and 'db' parameters lack field-level documentation. LLMs cannot infer what fields these objects require.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot determine which tools are safe to retry or which modify state.