Handoffs that carry the account, not a summary of it
Sales promised a custom integration in the last week of the deal. Onboarding found out in week three, from the customer, on a call that was supposed to be a kickoff.
The mixture
- 01 · Persistent memory
- Uses
- 02 · Current context
- Light
- 03 · Traceable decisions
- Uses
- 04 · Shared context
- Leads
- 05 · Scoped retrieval
- Uses
Every handoff loses something
An account passes through four teams and at least as many tools in its first year. Each hop drops a little context.
- 01
Promises live in the wrong system
The commitment was made in an email thread the success team cannot see. The handoff doc summarises the deal, and summaries drop the awkward parts.
- 02
Health scores without reasons
The dashboard says the account is amber. It does not say the champion is on leave and the admin has opened four tickets about SSO.
- 03
Renewal starts cold
Eleven months of context across support, success and product sits in four tools. The renewal agent reads none of it and opens with a discount.
Mostly shared context. Then three others.
Every application on Alchemyst is a different mixture of the same five jobs. That mixture is what makes this a different piece of software from the one next to it, even though the API underneath is identical.
One version of the business, however many agents read it
Sales, onboarding, support and renewal agents read and write one account context. Promises, escalations and product feedback are there for whoever touches the account next, scoped so each team sees what it needs.
- Commitments survive the handoff.
- Health comes with reasons.
- Renewals start from the whole year.
Uses · Persistent memory
The customer's goals, remembered
Stated goals and success criteria stay with the account from kickoff to renewal.
Uses · Traceable decisions
Why the agent flagged risk
Every risk flag carries the tickets, calls and notes behind it.
Uses · Scoped retrieval
What matters for this call
Account and topic scopes are intersected, so QBR prep pulls the right year, not the whole history.
That is four of the five. The fifth, current context (superseded versions are subtracted before the model ever sees them), is what leads in Employee support, Contract & legal ops and Financial ops instead. Same API, different mixture.
The sources you already have
Bring sources in through the data-source integrations (PostgreSQL, MongoDB, Google Docs, Google Sheets, Amazon S3), an n8n workflow, or a direct context.add call. Each one lands scoped, so retrieval can intersect it with everything else.
01 · Ingest
Scope what you ingest
Every document lands with a groupName: the sets it belongs to. Those sets are what retrieval intersects later, so the structure you choose here is the precision you get there.
context.addimport AlchemystAI from "@alchemystai/sdk";const client = new AlchemystAI(); // reads ALCHEMYST_AI_API_KEYawait client.v1.context.add({ context_type: "resource", scope: "internal", source: "sales-handoff", documents: [{ content: "Committed at close: Workday integration by end of Q1, a dedicated onboarding manager, SSO at no extra cost.", }], metadata: { fileName: "globex-commitments.md", groupName: ["cs", "acct_globex"], // the sets this belongs to },});02 · Write
Write the escalation where everyone can read it
Context only survives a handoff if it is stored against the account, not in the inbox of the person who noticed it.
context.memory.addawait client.v1.context.memory.add({ sessionId: "acct_globex", contents: [{ role: "system", content: "Risk: admin opened 4 SSO tickets in 2 weeks. Champion on leave until Oct 14. Renewal owner notified.", }], metadata: { groupName: ["cs", "acct_globex", "risk"] },});03 · Search
Search before preparing
Search intersects the scopes, subtracts superseded and duplicate content, and ranks what survives. Only that reaches the model, and the whole decision is recorded as a Context Trace.
context.searchconst { contexts } = await client.v1.context.search({ query: "Prepare the QBR for Globex", scope: "internal", similarity_threshold: 0.8, minimum_similarity_threshold: 0.5, metadata: { groupName: ["cs", "acct_globex"] }, // ∩ narrow scope});// − superseded, deduplicated → ranked → into the window// Every search is recorded as a Context Trace.const reply = await llm.respond(message, { context: contexts });
npm install @alchemystai/sdk or pip install alchemystai, both ship the same client. Full reference in the docs.
The account history is the customer's history
Success context mixes contract terms, usage data and people's names. Keep it scoped per account, exportable when the customer asks, and deleted when the relationship ends.
Security & complianceManaged cloud
Encrypted in transit and at rest, isolated per organization, and scoped at write time.
Dedicated infrastructure
EnterpriseSingle-tenant, with VPC peering when your data cannot share a network boundary.
Self-hosted
On-premiseRun the context layer on your own infrastructure, with OpenTelemetry for observability.
The same API, a different mixture
Each of these leads with a different job, pulls from a different set of sources and needs a different call. All of them, by job.
Bring the handoff that dropped something.
The one the customer had to remind you about.