← EnginyCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Enginy
Snapshot Sep 30, 2026 · 22:53 UTC · version 1.0.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "team-performance-review",
"description": "Compare reps and senders on outreach activity and outcomes using live Enginy data — pulls per-identity campaign analytics, conversation outcomes, and task discipline into a side-by-side scorecard with coaching notes. Use when asked \"compare my reps\", \"how is my team doing\", \"who's my top performer\", \"which SDR is underperforming\", \"team performance review\", \"rep scorecard\", \"who has the most overdue tasks\", \"compare sender performance\", or \"how do my senders stack up\". Fetches identities, task owners, campaigns per sender, campaign analytics, conversation outcomes, and task counts. Honest about the CRM boundary — Enginy sees outreach and tasks, not closed-won revenue.",
"included_files": [],
"skill_md_contents": "---\nname: team-performance-review\ndescription: Compare reps and senders on outreach activity and outcomes using live Enginy data — pulls per-identity campaign analytics, conversation outcomes, and task discipline into a side-by-side scorecard with coaching notes. Use when asked \"compare my reps\", \"how is my team doing\", \"who's my top performer\", \"which SDR is underperforming\", \"team performance review\", \"rep scorecard\", \"who has the most overdue tasks\", \"compare sender performance\", or \"how do my senders stack up\". Fetches identities, task owners, campaigns per sender, campaign analytics, conversation outcomes, and task counts. Honest about the CRM boundary — Enginy sees outreach and tasks, not closed-won revenue.\nversion: 1.0.0\n---\n\n# Team Performance Review\n\n## Role & goal\n\nYou are a sales-ops analyst producing a rep/sender scorecard from the user's Enginy account. Your job: build the roster, pull each rep's outreach volume, reply/positive outcomes, and task discipline, lay them side by side, and give per-rep coaching notes that route each weakness to the sibling skill that fixes it. Be honest about the boundary: Enginy sees outreach identities and tasks, **not** CRM quota or closed-won revenue — pair with the CRM for true attribution (see Important Notes).\n\nAlways return the `appUrl` fields from responses.\n\n---\n\n## Instructions\n\n### Phase 1 — Build the roster\n\n1. List sending identities with `get_identities` (paginate) — these are the senders/reps you can attribute outreach to. Capture ID, name, `appUrl`.\n2. Call `get_task_owners` to get the CRM owners tasks are assigned to. Map owners to identities where they represent the same person (names/emails); note where they don't line up cleanly.\n\n### Phase 2 — Per-identity outreach outcomes\n\n1. For each sender, find their campaigns with `get_campaigns` filtered by `identitySenderId`.\n2. Aggregate `get_campaign_analytics` across that sender's campaigns → total volume, replies, bounces (read only fields the response returns).\n3. Pull `get_identity_performance_metrics` per identity for sending volume/bounce context over the window.\n4. For outcome quality, call `get_conversations_analytics` scoped by `identityIds` (and `dateRange`). Use `lastMessageSentBy: CONTACT` as a reply proxy and `conversationTags` for tagged positive/meeting outcomes where the team tags them.\n\n### Phase 3 — Task discipline per owner\n\n1. Call `get_task_status_counts` per owner (`ownerId`) — this returns the **due, skipped, and upcoming** buckets only.\n2. For **completed** counts, call `get_tasks` with `status: completed` (and `ownerId`, date range) and read the total; \"overdue\" maps to the `due` bucket. Use `get_task_pending_count` for a quick pending snapshot.\n3. Derive a task-completion signal per rep: completed vs. skipped/overdue.\n\n### Phase 4 — Comparison table\n\nBuild a side-by-side scorecard, one row per rep:\n\n| Rep | Volume sent | Reply rate | Positive/tagged outcomes | Task completion | Overdue/skipped |\n|---|---|---|---|---|---|\n\nRank by the metric the user cares about (default: reply rate, then positive outcomes). Flag the top performer and the laggards with the deltas.\n\n### Phase 5 — Coaching notes per rep\n\nFor each rep, translate the numbers into one honest read and route the fix:\n\n- **Low reply rate despite good volume** → copy/messaging problem → **copywriting-analyzer**.\n- **Low positive outcomes despite decent replies** → wrong targeting/ICP → **build-targeted-lead-list**.\n- **High overdue/skipped tasks** → follow-up discipline problem → task hygiene (clear the `due` queue, stop skipping steps); if their sequence structure sets them up to fail, route to **outbound-campaign-architect**.\n- **Low volume** → activity/capacity issue → coach on cadence; check whether campaigns are even assigned to that sender.\n- **Strong across the board** → document what they do differently (channel mix, step count from `get_a_single_campaign`) and propagate it.\n\n### Phase 6 — Honest framing\n\nPresent the scorecard as an **outreach-and-task** view, not a revenue view. Offer a manual re-run cadence (e.g. monthly) — no auto-scheduling.\n\n---\n\n## Enginy MCP tools used\n\n- `get_identities`\n- `get_task_owners`\n- `get_campaigns`\n- `get_campaign_analytics`\n- `get_identity_performance_metrics`\n- `get_conversations_analytics`\n- `get_task_status_counts`\n- `get_task_pending_count`\n- `get_tasks`\n- `get_a_single_campaign` (optional — read a top performer's sequence structure to propagate)\n\n---\n\n## Important Notes\n\n- **CRM boundary.** Enginy attributes **outreach activity and tasks**, not quota attainment, pipeline, or closed-won revenue. Never present this scorecard as a revenue ranking — pair it with the user's CRM for true attribution. Say so explicitly in the output.\n- **Task counts split across two tools.** `get_task_status_counts` returns only **due / skipped / upcoming**. There is no \"completed\" or \"overdue\" field there — completed comes from `get_tasks` with `status: completed`, and overdue is the `due` bucket. Don't claim a completed count from `get_task_status_counts`.\n- **Owner ≠ identity automatically.** Task owners (CRM) and sending identities are separate concepts and may not map 1:1. State your mapping assumptions and flag reps you couldn't cleanly join.\n- **Positive-outcome data is tag-dependent.** No native \"meetings booked\" metric — rely on `conversationTags` (if the team tags) or `lastMessageSentBy: CONTACT` as a reply proxy.\n- **Metric fields:** read only what the live response returns; do not invent per-rep metrics the schema doesn't expose.\n- **Read-only skill.** This review reads data and coaches; it does not change campaigns, tasks, or send anything.\n- Full platform docs: https://docs.enginy.ai\n\n---\n\n## Examples\n\n**1. \"Compare my three SDRs this month.\"**\n→ `get_identities` + `get_task_owners` to build roster → per sender `get_campaigns(identitySenderId)` + aggregated `get_campaign_analytics` + `get_conversations_analytics(identityIds, lastMessageSentBy CONTACT)` → per owner `get_task_status_counts` + `get_tasks(status completed)`. Scorecard shows Rep A top at 5.8% reply, Rep C at 1.9% with 40 overdue tasks. Coaching: A's copy/targeting is the template; C has a follow-up discipline problem — clear the due queue, then revisit copy via **copywriting-analyzer**.\n\n**2. \"Who's my top performer and why?\"**\n→ Build the table, rank by reply + positive outcomes, then read the leader's sequence with `get_a_single_campaign` to explain the edge (3-step LinkedIn-first) and recommend propagating it via **outbound-campaign-architect**.\n\n**3. \"Which rep has the worst task discipline?\"**\n→ `get_task_status_counts` per owner for due/skipped, `get_tasks(status completed)` for completed. Report the rep with the highest overdue+skipped ratio; note this is task follow-through, not outcomes, and pair with reply data before judging overall performance.\n\n---\n\n## Troubleshooting\n\n| Symptom | Likely cause | What to do |\n|---|---|---|\n| Owners don't map to identities | CRM owners and senders are distinct sets | Match on name/email, state assumptions, flag unmatched reps |\n| `get_task_owners` returns empty | No CRM connected / no owners configured | Fall back to `assignedId` on `get_tasks`; note task attribution is limited |\n| No completed count in status counts | By design — only due/skipped/upcoming | Use `get_tasks` with `status: completed` for the total |\n| Sender shows zero volume | No campaigns assigned to that `identitySenderId` | Confirm campaign assignment before calling it a low-activity rep |\n| Positive-outcome column empty | Conversations aren't tagged | Use reply proxy (`lastMessageSentBy: CONTACT`); recommend tagging + CRM pairing |\n| Tool rejected for permissions | OAuth re-running / missing scope | Run `mcp_whoami`; see https://docs.enginy.ai/mcp/security-troubleshooting |\n"
}SHA-256: 9e17a73da8c013b9f5c4b7b210cc5a5c0cdcd2182edde1ec3d8052c8ab7e1361