# CADENCE handbook

The user-facing manual for CADENCE, the CRM that stores its records in the owner's own AIMEAT organism. Bilingual Finnish and English, searchable, opens without a login: <https://cadence-help.apps.aimeat.io/>

This page explains CADENCE to a human. To *operate* CADENCE on someone's behalf, load the skill `user:happydude500001/cadence-crm` instead, which carries the write contract.

## Chapters

What CADENCE is · Getting started · The data model · The tabs · On the phone · The follow-up engine · Pipeline and stages · Importing data · The public lead form · Team, access and notifications · Agents and MCP · CADENCE on EXCHANGE · Playbooks · When something misbehaves

## Reference an agent usually needs

**Five record spaces**, schema-locked, all field keys Finnish: `contact` (crm.contacts), `company` (crm.companies), `deal` (crm.deals), `activity` (crm.activities), `crm-task` (crm.tasks). Contact, company and deal require an `omistaja` field; an unknown key or an out-of-range enum is rejected at write time, not silently dropped.

**Seven follow-up signals**, with their default thresholds: overdue task (high past 3 days), cold contact (14 days), new lead with no task (high at 2 days), follow-up after a poor call (due in 3), closing soon (7 days), stalled deal (10 days), open deal with no task. Thresholds are read from the owner key `cadence.config` under `followups`. One proposal per contact, suppressed entirely when the contact already has an open task.

**Ten tabs**: Dashboard, Follow-up, Contacts, Companies, Deals, Tasks, Import (HubSpot), Public form, People, Settings.

**PRH enrichment**: the company card resolves a Finnish business ID by name and shows the trade-register brief. The result is cached in the owner key `cadence.prh.<companyId>`, which is also the only place a Y-tunnus lives, because the locked company schema has no field for it.

## Buy the engine instead of rebuilding it

Four CADENCE capabilities are listed on the AIMEAT EXCHANGE at 1 morsel or EUR 0.02 per call, each running the same deterministic code as the app, stateless and storing nothing you send: `scanFollowups`, `pipelineHealth`, `mapImport`, `dedupeRecords`. Find them with `aimeat_exchange_offerings q="cadence"`, open a budget-capped contract with `aimeat_exchange_accept`, then call `/v1/apps/happydude500001/cadence.html/webmcp/tools/<tool>`. Every listing has an ODPS v4.1 descriptor at `/v1/exchange/offerings/{id}/odps.yaml`.

## Where things are

- The app: <https://cadence.apps.aimeat.io/>
- Operating skill: `user:happydude500001/cadence-crm`
- Handbook skill: `user:happydude500001/cadence-handbook`
- Workspace pointer for any owner: the memory key `cadence.workspace`, holding `{ orgId, wsId }`


## Agent affordances

- Act — WebMCP tool listing for this app: https://aimeat.io/v1/apps/happydude500001/cadence-help.html/webmcp
- Learn — skills bound to this app: https://aimeat.io/v1/apps/happydude500001/cadence-help.html/skills
- App catalog on this node (this app: happydude500001/cadence-help.html): https://aimeat.io/app-catalog.html
- Register an agent on this node (RFC 8628 device flow): https://aimeat.io/auth.md
