salesascode
← All feature docs
Feature docs · /rollup

Activity

Everything your team did, in order: every pass, every draft, every account researched, every post written, every CRM write proposed, and every action you took, as one record on your clock. The health, trend and goal reports sit behind one door underneath.

Approve an Outlook draft

Choose Outlook drafts as your outreach destination on Today. In Activity, review the recipient, subject, message and connected mailbox, then choose Approve and place in Outlook. The draft remains unsent. Send it from Outlook when ready. If the response is uncertain, use Check Outlook receipt after reconciliation. The saved approval stays locked and the app will not create another copy. Skip and Snooze change the Activity list only; they do not remove an Outlook copy.

When your mailbox is paused

If too much mail from your Gmail or Outlook bounced this week, Send and Approve and place in Outlook on a queued draft from that mailbox are disabled, and hovering them gives the reason. Check the recipient, then choose I checked this address beside the button to clear that one draft. Every other draft stays held until you resume the mailbox in Connections.

Find the work behind your day

Activity combines runs, findings, research, hosted drafts, Studio content, queued outreach, proposed writes, Drive results, outbound send attempts, and your day actions. Search by title, account or role, then choose dates, role, kind and status. Older work loads another page from the same snapshot. The count is for the displayed page. A missing source is named and paging stops until you retry. Open an output and use Back to your activity to retain your filters. Sent means a provider accepted the message; it does not prove recipient delivery.

Overview

The work runs on a schedule, on our servers; this is where you see the result. Activity at /rollup is the record of the day, and the place a founder ends it. Today at Home is where it starts, and its Close the day band is one sentence counted from this same record.

Scoped to your account. A run by your roles never appears on anyone else's Activity.

The ledger

Recent activity is a table of work, role, outcome and next step, newest first. Each title includes its local date and time, with evidence details available in the row. Today is the default date range. Open Search and filter activity to find older work or narrow the role, kind and status. Ready to review, Completed and Needs attention count only records on this filtered page. If any source is unavailable, the summaries say Unavailable instead of showing a misleading zero. Drafts and questions remain available in the review disclosure below the table.

Filters. Open Filter by role or work type beneath the search toolbar for role and kind chips. They combine, and they live in the URL (/rollup?product=salescron&kind=drafted), so a filtered view is linkable. The account filter under Reports scopes the run history the same way it always did.

Every source is read on its own. If one cannot be read, the ledger says which, and the rest still render; it never shows an empty day it cannot vouch for.

Reports

Everything below lives on its own tab of the Activity hub, /rollup/reports, reached from the strip above the ledger or from the Reports link under it. It sat behind a door on the ledger page for a first cut; the tab keeps the record to one screen. An older link into a report card (a goal, a role's health) lands on the tab. The cards are unchanged.

What it shows

Delivered to your Drive

The runtime can put its reports where you actually read them: your Google Drive. When Drive delivery is enabled for your account, the daily run writes each report into your Drive "Accounts" folder as a native Google Doc (so it opens formatted and you can comment on it) plus a raw .md copy (the exact model output). The Delivered to your Drive card links each one, you never dig for a file.

This is a deployment option, off by default. It only runs when your operator enables owned connectors, your account opts in, and you've connected Google with Drive access. Writing a file into your own Drive folder is delivery, not an outbound send, nothing leaves your account. A delivery that fails is flagged on the card and never affects the run itself.

Drafts ready to send

On each scheduled pass, a run reads your account signals and drafts outreach for the contacts worth a touch that day. Those drafts land in the Drafts ready to send card, highest-quality first. Nothing is ever sent for you, every send is an explicit click.

What a draft looks like. Five blocks, one blank line between each. One or two sentences on the person and the company, from a post or comment of theirs on file and from what web research found, each fact cited. Two sentences naming a pain that research supports. One sentence on how your company meets it, by name, from your business brief. One sentence asking for time on their calendar. Then your signature, exactly as you wrote it under Settings, Profile. About 130 words before the signature; a draft over the cap is dropped, not trimmed.

The opening line. The first sentence after any greeting is held to three rules. It may not start with "I saw", "I noticed", "Congrats on" or "Hope you're well"; the same words later in a sentence are fine. It runs to 120 characters at most. And it may not match the opener of another draft from the same run once the two contacts' names and companies are swapped out. The first draft keeps its opener. A draft that breaks one of these rules is written again once, and dropped if the second try breaks one too.

Where the research comes from. Signals a rep pasted or a data vendor pushed for the contact, and a web-research pass on the person and the company, kept on the contact's record for two weeks so the same person is not researched every morning. There is no LinkedIn connector; a post or comment reaches a draft only through a pasted signal, a vendor, or the public web, and the draft never invents one.

Contacts held for their address. You send from your own mailbox, so a bounce or a spam complaint counts against your domain. Two kinds of address get no draft. A shared role inbox (info@, sales@, support@, hello@, noreply@ and similar) reaches a team or a ticket queue, not the person you researched. A catch-all domain accepts mail to any address, so the address proves nothing; we only know this when the provider that found the address said so (Hunter reports it on every lookup, Apollo only sometimes), and we never test a mail server ourselves. Held contacts are listed under the card, each with the reason. Draft to this address anyway approves that one address on that contact, and the next pass drafts to it. If the contact's address changes later, the new one is checked again. A hosted draft placed in Gmail with one of these addresses is held the same way.

Straight into your Gmail Drafts. Turn on Put new drafts in my Gmail Drafts on the card and each draft that clears the quality bar is also placed in your Gmail Drafts folder, addressed to the contact, with the subject line filled in. You read and send from Gmail. The card shows "In your Gmail Drafts" on those rows; sending from the card removes the Gmail copy so nothing goes twice, and Skip removes it too. Needs Gmail connected and managed connectors on. Off by default.

Say what was off, once. After you send your edited version or skip a draft, the card asks one question: Wrong fact, Wrong tone, Wrong angle or Never say this, with room for a short note. It is optional and it comes after the send, so it never holds one up; No thanks closes the card. A note becomes a line on a review card under What your roles noticed on your business brief: a fact to get right, a voice rule, a decision for the log, or a phrase to ban. Nothing changes until someone accepts that card. Once accepted, every drafting agent reads the rule from its next run, the nine roles included, and a queued draft that uses a banned phrase is dropped before it reaches this card. An answer with no note is counted but does not become a rule. For Never say this, the note is the phrase itself, matched as whole words; a single common word, or a phrase already in more than a third of your recent drafts, is refused with the reason under the note. If your approved rules cannot be read when drafts are built, no drafts are queued for you that run rather than drafts that might break a rule.

A draft with no email address on the contact shows "no email" and can't be sent until you add one. Leads sourced from someone engaging with your content appear on Content Studio under Warm leads instead, so the same person never shows up in both places.

Questions to ask

On a scheduled pass, a run looks at your worked deals, the ones past qualification, with a live close date and real MEDDPICC evidence, and finds the specific thing you still don't know about each: no economic buyer named, no decision process mapped, no compelling metric quantified. For each gap it drafts the actual question to ask that buyer next, in a discovery style that opens a conversation instead of inviting a one-word answer.

Only worked deals ever appear here, a deal you opened yesterday won't generate "ask who the economic buyer is", because an unstarted deal is supposed to have gaps. So an empty card means "nothing worth asking right now", never noise. Questions surface only once your pipeline actually holds opportunities with MEDDPICC detail; until then the card stays quiet.

Brain-state timeline

Brain sync is append-only, so every scope keeps a history of snapshots. The Brain State card links each scope to /rollup/brain/[scope], where you can see how that brain evolved:

Live activity

Skills that declare their start (the start_run MCP tool) show up while they work, not just after:

Role versions that do not declare starts never appear as running, their runs land directly in Recent runs when they finish, exactly as before.

Performance trends

Each role card carries a runs-per-day sparkline for the active window, with a 7d / 30d / 90d toggle above the grid. Under the sparkline: that role's median run duration and its error rate over the window. Bars for days with at least one failed run are tinted red; hover any bar for that day's exact counts.

The trend data (per role, and per skill within each role) comes from GET /api/me/rollup-trends?window=7d|30d|90d, scoped to your account.

How your work connects

The roles are built to feed each other: your business record carries your company, offer and voice, each role reads it, and each produces brain scopes the next one consumes. The How your work connects card draws that as a small diagram (inline SVG, no external libraries) over what you actually own:

Below the diagram, coordination warnings flag things to fix, each linking straight to the fix:

Honest empty state: owning one thing means there is nothing to coordinate, so the card says so and links to the catalog. Warnings are deterministic rules over your own run and sync history, no AI, every one reproducible.

Goals & targets

The Goals card turns Activity from a receipt into a pace check. Set a target against any outcome your roles actually report and see how far along you are this week or month:

The same data is available as JSON at GET /api/me/goals.

Pace & behind-pace alerts

Each goal shows a pace badge, Ahead, On pace, or Behind, computed deterministically by comparing how far through the window you are with how far toward target you are (within a plus-or-minus 15% band of the straight-line expectation). The progress bar tints red when you fall behind. Nothing here is a guess; every status is reproducible from your run history.

What moved to Home

Activity is the record of what ran. Deciding what to do about it belongs on Home, where everything competing for your attention is ranked against everything else rather than in its own card.

Two cards moved there. Suggested next actions, a fixed rule table over your telemetry, is now part of the ranked line, so a nudge from your run history sits in the same order as a deal about to slip instead of in a separate list you might not scroll to. Your hosted drafts is now the Waiting on you block, which shows how long each has waited, because an approval that quietly piles up is the failure that card could not surface.

Nothing was lost and nothing new is hidden. This page keeps the full run history, the health and coordination views, your goals, and the drill-downs below.

Run drill-down

Every row in Recent Runs links to /rollup/run/[id], one run, in full:

Per-role drill-down

Every role you own has its own page at /rollup/[pluginId], reachable by clicking its name anywhere it appears on Activity: the Is everything running? card, the By role card, or its node in How your work connects. It pulls that role's slice into one place:

Honest scoping: something you do not own, or a made-up id, reads as not found, indistinguishable from one that does not exist. Every section has an empty state (a role that has never run shows a connect prompt, not fake data).

Filter by account

When your skills tag their runs with an account (the optional account_ref label they pass to emit_telemetry, a domain or account name), Activity gains an Account filter above the runs:

Whether a skill tags its runs is up to the skill. One that works a specific account should pass its domain; one with no single account omits it. See the API reference for the label convention.

Dossier completeness

A compact GTM Context Dossier card rides along near the top of Activity: a meter scoring how many of the six dossier sections are filled (company, products, founder, voice, ICP, competitors) and a consumed-by line showing which roles have actually read your context, Core once your session pulls config, and each role with when it last synced brain state against it. The card appears only when it's relevant (you own the Content Engine, a dossier exists, or something has consumed it) and links to /onboarding/dossier to sharpen it. Full detail: GTM Context Dossier.

How it fills up

  1. Connect your tools and finish the setup for the roles you hold.
  2. As the scheduled runs happen, they call emit_telemetry and sync_brain against the runtime.
  3. This page reads the resulting plugin_runs and brain_sync records, scoped to your account.

Until a run happens, Activity explains what the first run will show, includes a small realistic preview, and offers one setup action. It does not put an empty table in front of you.

Weekly digest email

Every Monday, we email you a recap of the same data, runs and "actions" this week versus last, what changed, and any role that is idle or erroring, so you stay in the loop without logging in. You only get it if your runs happened in the last week. Every email has a one-click unsubscribe; you can also opt out from account settings.

How you compare

When your deployment enables cross-tenant benchmarks, a "How you compare" card shows your activity per won opportunity against the anonymized median band across every team on the deployment, never any other team's raw data. It appears only when the deployment flag is on, at least five teams have data, and you have not opted out (Settings, Data). Read-only. Full detail: docs/privacy/cross-tenant-benchmarks.md.

Data & privacy

The work runs on our servers, so we process the data you connect to do it. That data is encrypted at rest, isolated to your tenant, never sold, and never used to train models, and you can export or delete it at any time. Two different things flow into Activity, and they carry different sensitivity:

A short "Your data" card sits at the top of Activity linking to the full explainer on the Trust & security page (which also carries the security one-pager and our honest SOC 2 roadmap statement).

Related