salesascode
← All feature docs
Feature docs · /salescron/console

Persona Console

Your persona's control plane in the browser: turn the hosted runtime on or off, see every run and what it cost, review drafts, tune the schedule, and bring your own LLM key. It runs on our servers, so there is nothing to install.

Long records and smaller screens

Long record references wrap inside the role workspace. Wider tables scroll within their panel so navigation and surrounding controls remain on screen.

Page layout

The shared header keeps Today, Activity, Work, Team, and Settings in one row. Search opens the command palette. The account button contains display settings, help, and Explore this workspace for additional destinations.

Workspaces and saved work

Specialist pages show the entitled role's latest saved research and drafts beside its brief. Research opens saved research. Drafts opens Work with this role selected, including its research and drafts. History opens its Activity records. Role settings opens the console. An incomplete source warning means results are missing; it does not mean the agent has never produced work. Only work belonging to your account appears in this summary.

When your mailbox is paused

If too much mail from your Gmail or Outlook bounced this week, approving a draft to send by email from that mailbox, and the Gmail draft button, 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.

Open the original result

Activity and Work can open a specific draft or research source directly. The Drafts tab opens the requested saved record even when it is outside the recent queue. Historical drafts show their status and disable editing, snoozing and dismissal when those actions are unavailable. A draft held for later (a win-back timed for two weeks after a cancellation, a payment email waiting for the card retry, or one you snoozed) can be opened and read by its link, but it shows "Held until" with the date, and its Gmail and Salesforce buttons stay disabled until then. Approving it anywhere before that date is refused and nothing is sent. Snoozing a held draft can only move its date later, and dismissing then restoring it keeps the date. The Library opens the selected source with its facts, quotes and sales application. Existing approval and export controls remain in the original workspace.

Overview

Every role (gtmcron, salescron, leadercron, secronjob, partnercron, bdrcron, crocronjob, cscron, supportcron) has a console at /<persona>/console. It is the same control-plane shell, branded to each persona. The console never runs agents itself. It drives the hosted runtime that runs headless on our servers on a schedule, so nothing depends on you keeping an app open. The cross-product landing is /home.

Scoped to you. Your key, budget, schedule, and drafts are private to your account. The work runs on our servers, so we process the data you connect: it is encrypted, never sold, never used to train a model, and you can revoke access anytime.

The frame (2026-09-11)

The console opens with the role mark, the dot in the role's accent and its name that Today, Activity and the Work panels use, then the tab strip as a row with a hairline under it. The tabs, tiles, tables and buttons inside take the console's own styles in both themes; before this pass the rules written for them were scoped to the page template and never reached what the console draws at runtime, so a button rendered as the browser's default. The accent text step now follows the theme rather than painting the light step on the dark ground. Tables read from the left edge inside the centered column.

Inside the tabs (2026-09-12). What each tab draws now follows the same three rules as the rest of the app. A read-only summary, your goals and pace, the cohort medians, the team rollup, is a head, a hairline and rows, so the panel no longer stacks a card inside the card it already sits in. A card is kept for the blocks you act in: the roleplay and brief pickers, the proof-point form. The role mark replaces the grey eyebrow on the things the role produced, your quarter recap, the week's one skill, a roleplay scorecard, the open findings, so you can see at a glance which of them came from the agent and which are your own settings. Every text box and input takes the theme instead of the browser default, which on the dark ground was a grey slab with a placeholder you could not read.

This hire's number

Under the heading, the console shows the one number this role was hired to move, as a sentence: its baseline from the first week of connected data after the hire, the readings at day 30 and day 60, and your target. When a week had no data it says so and names the connection that supplies it. The line is read-only here; pick the number, change the target and choose whether to show the result on /watch from Home, which explains each role's list and where its data comes from.

How it runs

The hosted runtime runs on our servers on a schedule. There is nothing to install and no app to keep open. Deterministic detections are free and always available. AI drafting runs on your own provider key: every tier is bring-your-own-key, and the AI tier turns on once you add a key in Settings. Without one you still get the full deterministic tier at no cost. Where the deployment turns it on, a small platform-funded allowance covers your first runs before a key is needed. A key turns drafting on; nothing is sent until you turn the send layer on.

When the included budget runs out. AI runs pause until the reset at the start of next month, and every deterministic check carries on unchanged, so the ranking and the findings keep arriving. The Settings tab says so where the meter is and offers the one thing that changes it: add your own provider key and runs go on your key, metered to you and not capped by us. The header pill reads "AI paused" so a quiet month is never a mystery. It used to say only a zone name, and the blocked-run message pointed at raising a cap, which is an operator setting no control on that page can move.

Some work is about one account. A morning brief reads the whole book and produces one draft. A pre-call brief is about a particular company, and those skills now run once per account: each run names its account, carries its own key, and produces its own draft, so two accounts on the same day are two briefs rather than one with no company on it. The agent is told which account it is working on, with the name, domain and last-worked date already on file, and is asked to work only from that account's records. A run you start for one account from the console gets the same block. Before 12 October 2026 a scheduled run named the account only on its draft, so the agent wrote every account's brief from the same prompt. The rotation takes the least recently worked accounts first, up to three per run, and an account that already had that skill today is skipped so a retry or a second dispatch cannot produce a duplicate. An account your exclusion policy holds is skipped with the rule named, and a role with no accounts to work on records a skip that says so rather than writing a brief about nobody. On the Team page you can schedule a role on up to three chosen accounts; from the time you pick, those accounts go first in the rotation and still pass every other check.

Draft-first. A run only ever creates a draft you approve. Nothing is sent without your yes, and you choose where each draft lands in Settings: the in-app Draft queue, which is always on, or your Google Drive. Gmail drafts and Outlook drafts are chosen for every role at once on Home, and only while that mailbox is connected. Once mailbox delivery is switched on (it stays off until the app passes a Google security review, not yet started), a role whose destination is Gmail drafts also places each scheduled draft that is a message (not a brief or a report) in your Gmail Drafts folder, unsent and with no recipient. It stays listed here, but you edit and send it from Gmail: editing it here or approving it to send by email is refused with the reason, and → Gmail draft on it returns the same draft rather than a second copy. A message leaves only when you choose to send it, and only once the send layer is on.

Where this role's work lands is your answer, not a guess. Settings carries three choices: read it in the app, have it written to a Google Drive folder, or send it to your own self-hosted kernel. The queue is always on, so before September 2026 there was no way to tell a founder who had chosen it from one who had not answered, and the setup step asking where output goes stayed open for the life of the account. It is recorded per role, so one role can write to Drive while another stays in the app. Changing it never moves work already queued: what was queued keeps going where it was going, and the role card says so while both are in flight. An account that had Drive delivery or a kernel before this shipped keeps it and is asked to confirm it once, because a flag somebody turned on is not the same as an answer they gave. A destination that stops being writable turns back into a question rather than leaving the step green over a dead target, and that includes a Drive folder whose last delivery did not arrive: the toggle staying on after a revoked Google token is exactly the case where the product would otherwise keep telling you your work was being filed.

The answer is the last word on where work goes, not a preference shown back to you. Choosing the app stops Drive delivery even if the Drive toggle is still on, so the console and your Drive folder cannot disagree about where your account material is going.

Setup and readiness. The console's checklist counts your own records only; the sample book never marks "Connect a data source" done, and the same rule runs on Home so the two agree. "Choose where output goes" is done when you have picked one of the three and it is writable. Home also shows readiness per role, derived from what each role's free checks read, so this console's role can be waiting on a record type while another role is live.

Which tab opens. The console opens on Runs as soon as the role has a run to show, so the first thing you see is what it did. While nothing has run it opens on Schedule, where the setup checklist and the free checks are. A link that names a tab (?tab=runs from Home, for example) still opens that tab, and the sample-data link still opens Settings.

Before anything has run, the Drafts and Runs tabs do not just say "nothing here": they point you at the next step, turn the runtime on from the Schedule tab, run a skill now, run the free checks, or load sample data in Settings to try the review flow before you connect live data.

The tabs

Seven tabs are always there: Schedule, Draft queue, Library, Runs, Handoffs, Build, and Settings. Which of the rest you get follows your seat. A leadership seat (gtmcron, leadercron, partnercron, crocronjob) adds Team, for eight. A front-line seat (salescron, secronjob, bdrcron, cscron, supportcron) adds Coaching and Live coach, for nine.

What the tabs are fed by

Bring your own key (BYOK)

By default the runtime uses our key with a monthly budget cap priced into your subscription, so it works with no LLM key of your own. In Settings you can instead supply your own Claude, OpenAI or OpenRouter key and choose the model it runs on; runs then meter to you and don't draw our budget. Keys are write-only: once saved, the console only ever shows whether a key is set, never the key itself. Your key powers everything the console runs for you: scheduled hosted runs and the Live coach tools (roleplay, meeting prep, inbound reply) alike. Bedrock support is built but not accepting keys yet; the option unlocks once the transport is validated, and until then the Settings card shows it as coming soon.

Because a saved key is encrypted at rest, it is possible for a stored key to stop being readable, for example after a server-side key rotation. The console checks this rather than assuming a saved key still works: when a key is stored but can no longer be read, the provider shows as key set, unreadable, the LLM pill reads key unreadable, and the Settings card tells you to paste the key again. Scheduled runs keep going on the included tier in the meantime, and each such run records the reason on its own row in the Runs tab, so a run billed to the included tier instead of your key is never silent. Where a deployment requires your own key, that run stops instead and the Runs tab shows the failure with the same reason.

Provider and model (since 12 September 2026). Pick the provider, then the model from that provider's list; the recommended one is preselected, and Custom model id takes an id the list does not carry. With a Claude key each role runs on the model its task was routed to. With an OpenAI or OpenRouter key and no model chosen, each role runs on that provider's model for the same tier (GPT-5 for drafting, GPT-5 mini for light work; on OpenRouter, Claude by way of OpenRouter), so a key saved without a model never sends a Claude model name to OpenAI, which is what used to fail every run. A model you choose applies to every role on the account.

Checked on save. Pressing Save and check key sends one tiny request to the provider with the key and model you chose. If the provider refuses it (a wrong key, a model it does not serve), nothing is saved and the card shows the provider's own message. If the provider cannot be reached, the key is saved and the card says the check did not complete; the next run reports a real error if the key turns out to be wrong. Remove key takes the account back to the included tier.

The scheduled runs and the per-account crons (the morning queue, follow-up extraction, gap questions) all spend the same key. The one call that still needs a Claude key is the contact research behind the morning drafts, which uses Claude's web search; with only an OpenAI or OpenRouter key that one call runs on the included tier and the draft itself runs on yours.

Your knowledge library (grounding)

Every AI draft grounds on your proof points, not general knowledge. The console keeps a per-tenant library of cited notes: case studies, win stories, product facts, each traced to a named source. Before a run drafts, its library is pulled in as a cited-context block and the model is told to cite the source in brackets after each claim and to use only those facts. If the library has nothing on what a draft needs, the run says so plainly rather than inventing a stat, and any number in the draft that lacks a citation is flagged for review.

Your library has two layers. On your first scheduled run the console seeds the seat's built-in craft library (your persona's playbook: value framing, discovery, qualification, and so on), so grounding is never empty on day one. On top of that you add your own proof points in the console's Library tab: title a win, list the facts, and it is cited from then on. The Library tab shows both layers separately, so you can review exactly what grounds your drafts, add or remove your own proof points, and remove any built-in craft you do not want. Personal, medical, and signed-legal sources are refused at ingest. Your library is private to your org and never visible to another tenant.

Not every skill is grounded, and the ones that are not say why rather than staying quiet. A skill that narrates a score the deterministic tier already computed takes no craft input, because no playbook text can change a number that is already decided. Since 2026-08-22 the founder-marketing skills on gtmcron (launch playbooks, the content calendar, messaging experiments, build-in-public, community replies) read a content craft library of their own rather than the deal-running playbooks: writing for an audience who has not raised a hand is a different discipline from running a deal, and grounding a launch plan in objection handling would have produced a citation that pointed somewhere misleading. Two gtmcron skills stay deliberately ungrounded for reasons that are not about a missing library: the investor update reports to a board, and the decision log records a decision already made.

Two layers is the whole list. Until September 2026 a scheduled run also passed its playbook text through a per-team override layer, which could substitute a team's own wording for a built-in playbook file. Its editor was retired long before, so nothing could write an override and the layer changed nothing on any run; it was removed rather than left as a step that reads a database and returns what it was given. Nothing a run is grounded in changes as a result.

The two layers play different roles. The built-in craft grounds how to frame a draft (the method), but a run's proof points, the stats, logos, and quotes it can cite as results, come only from what you uploaded. So a draft never presents a generic playbook line as if it were your customer's outcome; if you have not added a proof point yet, the run says so rather than borrowing one. Extend or replace the seeded craft with your own notes anytime.

A third layer arrives once your organisation has more than one seat: what colleagues have already established. Every run can read the findings other roles' runs recorded about an account, so a customer success run that spotted a renewal risk is something the account executive's run reads rather than works out again. The run sees whether a finding is its own or a colleague's, and it is told to check before deriving an account fact itself. You only ever see what you are entitled to see: a finding stays private to the seat that made it unless the type is one your organisation has already declared shareable, and that decision is made once, in one reviewable place, rather than per run.

Since 2026-08-29 a run also carries your own memory: the open gaps, pending next actions and recent insights the weekly reflection found in your activity, appended after the playbook context. Until then that block reached the in-app assistant and nothing else, so a scheduled run was coached from the playbooks alone. It is about two hundred tokens when a reflection exists and nothing at all when one does not; a rep who has not been reflected yet is drafted for exactly as before.

Connect your CRM (managed)

In Settings you can turn on managed connectors. Link Salesforce, HubSpot, Gmail, or Google Calendar right in the browser; we custody your OAuth token encrypted, poll it on a schedule, and fill your accounts, opps, and contacts server-side. There is nothing to install. The panel shows each provider's connection state and last sync, and a Sync now button pulls your book immediately.

Opt-in and reversible. Token custody is a choice: a security-strict team can leave it off and run its own self-hosted delivery instead (see below). Same as the Settings → Connect page, which carries the same panel.

Connected activity tools feed the free deal-risk checks as account signals: Outreach replies, Salesloft activity, Planhat health changes, Consensus demo engagement, Intercom conversations (including Fin resolutions), and Crossbeam partner overlaps each attach to the matching account so the next scheduled pass can flag it. A signal that cannot be matched to one of your accounts is skipped, never guessed.

When a call ends, a draft is waiting. For an AE seat, a recorded call from Gong, Fathom, Zoom, Google Meet or Teams that matches one of your accounts gets one draft in the AE console's Draft queue. If the transcript shows a buying signal (a price discussed, a scope asked for such as a seat count or a quote, or a start date), the pricing-proposal-builder skill drafts a proposal for that account, with the lines from the call quoted under it and the assumptions listed. If not, you get a short follow-up note built from the next steps the call tool recorded, with no AI call at all. The check is plain pattern matching first; only a call it cannot decide goes to a small model, and only the lines it flagged are sent. Prices still come only from your records: a figure said on the call is listed as something to confirm, and if the draft uses one that your records do not carry, it is replaced with [unconfigured: price]. The run has no tools that write or send, so nothing a buyer says on a call can queue an email or a message. A call gets one draft, ever, even if the call tool sends it twice, and nothing is sent. A call within the last three days that has not matched an account yet gets its draft once the contact is on file. Calls start at most two proposals a day for you, because a proposal spends from the same budget as your scheduled skills; past that a signal call gets the follow-up note, which says so, and you can run the proposal from the console.

Deliver reports to your Google Drive

In Settings, the Deliver reports to Google Drive toggle sends each hosted run's report into your Google Drive "Accounts" folder as a native Google Doc plus a raw .md copy, so you read the report where you already work. A run about a specific account lands in a per-account subfolder (Accounts/<account>); a general run lands in the Accounts root. The same deliveries show on your rollup under "Delivered to your Drive".

Off by default. The toggle needs managed connectors on and the Google Drive connection under Settings, Connections, because delivery uses that connection. The connection asks Google for two kinds of access: reading your files for the business brief, and writing only the files and folders this app creates. An older connection that granted read access only cannot deliver, so it shows as needing reconnect; reconnect once to grant write access. Writing a file into your own Drive folder is delivery, not an outbound send.

Under the toggle, the console names the last three files that landed, with links to each, and says plainly when one did not reach your Drive. A failed delivery means the file write failed, not the run: the report is still in the app and on your Activity page, which is where the full history lives. If the console cannot read that list it says so rather than showing you an empty one, because "nothing has been delivered" and "we could not check" would send you looking in different places.

Advanced: self-hosted delivery (optional)

Most teams use the managed path above. If your security posture requires every credential to stay on your own infrastructure, you can run a small n8n on a machine you control that holds your own OAuth and LLM credentials. Those runs place real Gmail or Outlook drafts and write CRM records on your infrastructure, never ours. Templates live in n8n-templates/ and setup lives in your product docs. Nothing is ever auto-sent.

Keyboard: the Cmd-K palette

From the console (or any signed-in page), press Cmd+K / Ctrl+K or click Search in the top bar to jump to a page, a pending draft by title, or a quick action without touching the mouse. See Home (Today) for the full palette guide.

When a coaching section cannot load

The Coaching tab is assembled from several reads: your goals and pace, the cohort comparison, and your quarter recap. A section whose read fails now says so. It used to disappear, which looks exactly like having no goals set, or no cohort yet.

What runs it

The hosted runtime is server-side cron plus a bounded agent loop. It runs on our servers on a schedule, with nothing to install and no app to keep open. Scheduled AI work runs on your own provider key (bring-your-own-key on every tier), after any platform-funded first-run allowance the deployment turns on.