← KensoCONTENT HISTORY
WHAT CHANGED
Update to Kenso
Snapshot Nov 3, 2026 · 12:13 UTC · version 1.3.4
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Kenso and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Write a weekly or monthly results report from live campaign numbers - headline, scoreboard, three interested replies, what changed, next moves and a cover email - as text you return. Distinct-contact replies, no opens, N/A instead of 0, no vendor names.",
"included_files": [
{
"relative_path": "references/templates.md",
"size_in_bytes": 5763
}
],
"name": "report",
"skill_md_contents": "---\nname: report\ndescription: Write a weekly or monthly results report from live campaign numbers - headline, scoreboard, three interested replies, what changed, next moves and a cover email - as text you return. Distinct-contact replies, no opens, N/A instead of 0, no vendor names.\n---\n\n# Report\n\nWrite the weekly or monthly results report for a workspace: for an agency's client, for a team's manager, or for the user. You pull the numbers for the window, check them, pick the replies worth quoting and write the report and a short cover email. The report is text you return in your reply. A person reads it and sends it.\n\nEvery call takes an optional `workspace_id`. Send it when the user can see more than one workspace: `list_workspaces()` lists them. Dates are ISO-8601 instants (`2026-10-01T00:00:00Z`). Rates come back as fractions from 0 to 1.\n\n## The rules\n\n- **Replies are people.** Count distinct contacts, never messages. Out-of-office is not a reply.\n- **Never report opens.** Open tracking is off for deliverability, so open numbers mean nothing.\n- **Three interested replies, or none.** Quote exactly three, from three different people, or leave the section out. Never pad it with a neutral or out-of-office reply.\n- **N/A, never 0, for anything you could not read.** A 0 says nothing happened; N/A says you do not know. Every N/A that only the reader can fill (meetings held, pipeline, cost per meeting) becomes a question under \"Where we need you\".\n- **Benchmarks and targets are the workspace's own.** Use the ones Step 0 gives you, or one the user gives you with its source. Write N/A for one you do not have, and never quote an \"industry average\".\n- **No vendor names.** Never name a sending provider, data vendor, mailbox host or AI model maker in the report. Say \"your sending domains\", \"our data\", \"the AI\".\n- **Names as the app shows them.** Use each campaign's and segment's name exactly as it appears in Kenso. Never an internal label such as \"plan 3\" or \"v2 series\".\n- **Never invent results or work.** Meetings, pipeline, revenue, costs and \"what we did this week\" come from a tool or from the user. When neither has it, write N/A or leave the line out.\n- **A person sends it.** You draft the report and the cover email. Never send it, and never create a share that emails anyone, without a yes.\n\n## Step 0 - Who, which window, which campaigns\n\n1. **The window.** Weekly is Monday to Sunday. Default to the latest week that has ended. Monthly is a calendar month. Default to the previous month in the first 3 days of a month, otherwise month to date, and say \"month to date\" in the report.\n2. **The campaigns.** `list_campaigns(limit=100)`. Keep every campaign that sent in the window (Step 1 tells you). Name each one as the app does.\n3. **The reader.** Ask who it is for if the user did not say: the client's contact name for the greeting, and the sender's first name for the sign-off.\n4. **Benchmark and target.** The workspace's saved benchmarks and targets cannot be read from here. Use a reply rate, interested reply rate or meetings per month benchmark or target only when the user gives you one with its source. Both rates are per person contacted, not the share of replies. Write N/A for the rest: it means \"not given\", not \"not set\".\n\nIf an operation this skill names is not listed for you, or answers 404 on a campaign the user named, stop and say: \"I can't read those results from here. They are in Kenso at https://app.ken.so/<workspace id>/campaigns/<id>.\" Do not retry a 404 as \"not found\", and do not report a campaign as missing because one read failed.\n\n## Step 1 - The numbers\n\n**Weekly**, per campaign: `get_campaign_weekly_report(campaign_id=42, week_of=\"2026-10-20\")`.\n\n- `week` and `toDate` each hold `sentCount`, `contactedCount`, `replyCount`, `interestedCount` and `bounceCount`. `toDate` runs from the campaign's start.\n- `segments` gives each segment's contacts, sends and reply rate to date.\n- `changed` lists the week's changes, and `next` the leads left and the estimated finish date.\n\nUse `week.startDate` and `week.endDate` as the window for every other read in this report. Skip campaigns whose `week.sentCount` is 0, unless they are new: then say they are getting ready.\n\n**Monthly**, per campaign: `get_campaign_performance(from_time=\"2026-10-01T00:00:00Z\", to_time=\"2026-10-31T23:59:59Z\", campaign_id=42)`, and the same call with `group_by=\"segment\"` for the segment rows. Read the weekly report for each week of the month for `changed`.\n\n**Workspace totals:** the same performance call without `campaign_id`. Its `meetingsBooked` counts meetings booked from campaigns. Meetings held are not tracked yet, so that row is N/A.\n\n**Clicks:** use the human `clickCount` and the returned `clickRate`. Never add `botClickCount`. A 0 on a campaign that sent volume with links in it can mean tracking is not recording: when you cannot confirm it, write N/A.\n\n## Step 2 - Replies\n\n`get_reply_breakdown(from_time=\"2026-10-20T00:00:00Z\", to_time=\"2026-10-26T23:59:59Z\", by_campaign=True)`\n\n- Replies are `totalCount` minus the `out_of_office` count. Interested replies are `interestedCount`. `byCampaign` gives both per campaign. Each person counts once.\n- If these differ from the weekly report's `replyCount` and `interestedCount` for the same window, use the classification read and say in your note to the user that replies are people who answered, with out-of-office left out.\n- Check classification is keeping up: a large `unclassified` share means positive replies are undercounted. Then write the interested number as N/A (\"replies are still being classified\") and tell the user. `campaign-diagnosis` Step 1 has the full check.\n\n## Step 3 - Three interested replies, or none\n\n`list_inbox_threads(campaign_id=42, interest=\"interested\", limit=25)`, for each campaign in the report.\n\nKeep threads whose prospect replied inside the window. Pick three different people for the whole report, favoring replies with substance: a question, a referral, a meeting request. For each one give the name, title and company, and a quote of at most 200 characters on one line. Fewer than three in the window: leave the whole section out.\n\n## Step 4 - What changed and what comes next\n\n- Turn each `changed` entry into one plain line that names the campaign: \"New version of the email sequence for <campaign>\", \"Paused variant B of step 2 in <campaign>\", \"Added the <segment> segment to <campaign>\". Group repeats: one line per campaign and kind of change. At most 8 lines for a month.\n- `next` gives the leads left and, when it can be estimated, the day the last lead starts.\n- Work outside campaigns (new domains, inbox setup, research) is in no tool. Ask the user for it, or leave it out.\n\n## Step 5 - Deliverability (optional)\n\n`get_deliverability(from_time=\"2026-10-20T00:00:00Z\", to_time=\"2026-10-26T23:59:59Z\", group_by=\"domain\")` and `list_auto_pauses()`. Write one line: the bounce rate with its counts, the number of sending domains, and any active hold. If a domain looks unhealthy, say so plainly and suggest the user check that domain's health in Kenso. If you did not read it, leave the line out rather than call it healthy.\n\n## Step 6 - Sanity-check before you write\n\n- Per campaign and in total: interested is at most replies, replies at most contacted, contacted at most sent.\n- The campaign rows add up to the workspace totals.\n- Every number uses the same window.\n- A campaign that sent but shows 0 replies: confirm classification and holds before you print the 0.\n\nFix the source of a failed check, or write that number as N/A and tell the user why in your note. The reason goes in the note to the user, not in the report.\n\n## Step 7 - Write it\n\nOpen `references/templates.md` in this skill's folder for the weekly email, the monthly review layout and the wording of the lines. In short:\n\n1. **Headline:** one sentence with the period's main number.\n2. **Scoreboard:** sent, people contacted, replies, interested replies, meetings booked, human clicks, each with its N/A where unknown. In the monthly review only, add reply rate, interested reply rate and meetings against the benchmark and target from Step 0 (see the template). A weekly report never puts a week's meetings next to the per-month numbers.\n3. **Per campaign:** two or three lines each.\n4. **What worked** and **what we would change:** each tied to a number. Skip a section that has nothing real.\n5. **Next moves:** at most three, each one change with a hypothesis (\"Shorter step 2 for the RevOps segment: we expect more interested replies from step 2 within two weeks\").\n6. **Where we need you:** the questions and the data you need from the reader.\n7. **Cover email:** two to four lines that point at the report and give the headline.\n\nReturn the report and the cover email as text in your reply.\n\n## Step 8 - Hand it over\n\n- **Default:** the user copies the text and sends it.\n- **Share page (optional):** `create_share_link(items=[\"report\"], permission=\"view\", campaign_id=42)` makes a view-only page with the campaign's weekly report, and `recurring_report=True` refreshes it every Monday. Passing `recipients` emails them the link, so ask first. Send the user `data.url` from the response; never build a share link yourself.\n- **Studio doc:** not made from here. A user who wants the report as a Google Doc builds it in Studio in Kenso.\n\n## What this skill cannot do yet\n\n- Render a slide deck. The report is text, or a Studio doc where Step 8 offers one.\n- Count meetings held, or read the reader's CRM pipeline. Both are N/A until the reader gives them.\n- Read the workspace's saved benchmarks and targets. Here they are N/A unless the user gives them.\n"
}SHA-256 of public snapshot: 83a0b6116ce4d89c0021f0b96e97c1f3ad02fa3d856c1c7cb8be1040966d6cde