To track the next steps promised on sales calls, deploy Cargo’s next-step-tracker cookbook: every weekday morning one agent reads the call log in your go-to-market repo, records each dated commitment either side made, closes it only when the activity log shows it was kept, and posts what is due or overdue to one Slack channel. Its only write is its own ledger model.
What the cookbook deploys, from its code in getcargohq/gtm-skills on 2026-10-16: 9 resources (one agent, one ledger model, two read-only evidence models, three connectors, two folders), a weekday cron at 14:00 UTC, and at most one Slack message a day.
The problem, and the answer #
A promise made on a call (“we’ll send the security doc”, “legal will review by Friday”) lives in the call notes until someone remembers it. The answer is to record each promise once, when it is made, and to close it only on evidence, so the list that reaches Slack is what is actually still owed.
How it works, end to end #
- The cron fires at 14:00 UTC, Monday to Friday (
0 14 * * 1-5), after the call-capture run at 07:00 UTC. The agent clones the default branch, so it reads call entries that were merged, not ones still in review. - It extracts new commitments from every entry under
cadence/log/calls/dated in the last 30 days. A commitment is a specific thing one side said it would do for the other, in either direction. Unchecked action items count, and so does a promise quoted in the body that the actions missed. Checked items andSTALE-CHECKitems do not. A vague intention is never recorded. - It records each one once in the
commitmentsmodel, keyed on the entry path plus a slug of the promise, with the account, its owner, who promised, the promise quoted as written, and a due date. When no date was said on the call, the due date is the call’s date plus 7 days for a promise the team made and plus 14 days for one the customer made. - It closes what was kept, only on a plain match: a meeting, call, email, note or task in
gtm_activitieson that account after the call, or a later call entry saying it happened. The closed row cites that record. Anything less stays open, because a promise closed by mistake is the failure nobody notices. - It posts what is due. Open commitments due today or earlier, not already flagged today, go out as one message grouped by owner, overdue first, each line saying who promised, when, how many days overdue, and what would close it. With nothing due, it posts nothing.
- It marks them flagged only after the post succeeds, so a failed post is retried by the next run.
“Today” is computed in TRACKER_TIMEZONE, America/Los_Angeles by default; change it together with the cron.
What it needs and what it costs #
- A call log under
cadence/log/calls/, written by the call-capture cookbook or by hand in the same shape. - GitHub, Slack and Anthropic connectors. GitHub is only the clone path: the agent commits nothing. Slack is
postMessagewith the channel locked, because a flag quotes what a customer said on a call. - Activity evidence in the native
gtm_activitiesandgtm_accountsmodels, filled by whatever already logs your team’s activity. A team on HubSpot, Salesforce or Attio swaps them for connector-backed models of the same names, and the prompt does not change. @cargo-ai/cdk1.0.92 or later.
The evidence reads are SQL over workspace models and bill nothing, and Slack postMessage carries no credit price in Cargo’s action catalog. The recurring cost is the agent run each weekday, billed as language model tokens through your Anthropic connector. It grows with the number of call entries in the 30-day window and open commitments to check, not with the size of the activity log.
What it will not do #
- Contact a customer.
- Write to any model but its own
commitmentsledger. The evidence models are read-only, so it cannot close its own commitments by logging an activity. - Edit, commit or push anything in the repository, or open a pull request.
- Post anywhere but the locked channel, or more than once a day.
- Turn a customer’s promise into a task for the rep. It is flagged as a follow-up.
Deploy it #
npm install -g @cargo-ai/cli
cargo-ai login --email you@company.com
cargo-ai project add cookbook/next-step-tracker
cargo-ai project plan
cargo-ai project deploy
Signing up from the CLI needs no browser and no card, and comes with 100 free credits. Set channelId in infra/next-step-tracker/agents/tracker.ts before you plan. The next-step-tracker cookbook page lists every resource and placeholder.
Promises that go quiet often mean a deal that went quiet: nudge stalled deals every week with a drafted follow-up.
Frequently asked questions #
In the call log under cadence/log/calls/ in your go-to-market repo, from
the last 30 days. The call-capture cookbook writes that log from your call
recorder.
Only on a plain match: an email, meeting, call, note or task logged on that account after the call, or a later call entry saying it happened. The closed commitment cites that record.
Yes. Both directions are recorded. A customer’s promise gets a 14-day default due date when none was said, and the Slack line frames it as a follow-up for the rep.
No. It reads native Cargo models; a CRM-backed model of the same name is a swap, and no CRM write action is ever added to the agent.