Use case · Financial ops

Finance agents that use the number finance actually signed off

There are four versions of Q3 revenue in your drive: the forecast, the flash, the restated figure and the board deck. An agent that picks one at random is worse than no agent.

The mixture

01 · Persistent memory
Light
02 · Current context
Leads
03 · Traceable decisions
Uses
04 · Shared context
Uses
05 · Scoped retrieval
Uses
01 · What breaks

Every number has three drafts

Finance agents rarely fail at arithmetic. They fail at choosing which number to do the arithmetic on.

  1. 01

    Forecasts outrank actuals

    The forecast was discussed in forty emails. The actual was posted once. Retrieval weighs volume, so the agent quotes the number everyone talked about, not the one that closed.

  2. 02

    Revenue means five things

    Sales says bookings, finance says recognised revenue, the board says ARR. The agent reads all three as "revenue" and adds them up.

  3. 03

    Restatements do not propagate

    Q2 was restated after audit. Every agent built before the restatement still reconciles against the original figure, and nothing tells them otherwise.

02 · What it's made of

Mostly current 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.

Leads · Current context

Only the version in force reaches the window

Every figure is stored with its period, its status (forecast, flash, final, restated) and what it replaces. Superseded figures are subtracted, so the agent reconciles against the final number unless you explicitly ask for the forecast.

  • Final beats forecast unless you ask otherwise.
  • Restatements replace, they do not coexist.
  • Every figure carries its period and status.

Uses · Shared context

One definition of revenue

Semantic consensus pins "revenue" to the definition finance owns, for every agent.

Uses · Traceable decisions

Where the number came from

Each reconciliation carries the file, period and status of the figure it used.

Uses · Scoped retrieval

This entity, this period

Entity and period scopes are intersected before ranking.

That is four of the five. The fifth, persistent memory (preferences and corrections survive the session, the handoff and the model swap), is what leads in Assistant agents, Commerce agents and EdTech & tutoring instead. Same API, different mixture.

03 · What feeds it

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.

ERP exportsGeneral ledger (PostgreSQL)Board decksClose checklistsGoogle SheetsEmail
  1. 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.add
    import AlchemystAI from "@alchemystai/sdk";const client = new AlchemystAI(); // reads ALCHEMYST_AI_API_KEYawait client.v1.context.add({  context_type: "resource",  scope: "internal",  source: "gl-close",  documents: [{    content: "Q3 FY26 recognised revenue, final after close: $4.82M. Supersedes flash estimate of $4.95M.",  }],  metadata: {    fileName: "q3-2026-revenue-final.csv",    groupName: ["finance", "fy26", "q3", "final"],   // the sets this belongs to  },});
  2. 02 · Write

    Replace the figure when it is restated

    A restatement is a new version of the truth. Store it with what it supersedes, and move the old figure out of the final scope so nothing reconciles against it again.

    context.add
    await client.v1.context.add({  context_type: "resource",  scope: "internal",  source: "gl-close",  documents: [{    content: "Q2 FY26 revenue restated after audit: $4.41M (previously $4.57M).",    status: "restated",    supersedes: "q2-2026-revenue-final.csv",  }],  metadata: {    fileName: "q2-2026-revenue-restated.csv",    groupName: ["finance", "fy26", "q2", "final"],    lastModified: "2026-08-19T00:00:00Z",  },});
  3. 03 · Search

    Search before reconciling

    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.search
    const { contexts } = await client.v1.context.search({  query: "Reconcile Q3 revenue against the board deck",  scope: "internal",  similarity_threshold: 0.8,  minimum_similarity_threshold: 0.5,  metadata: { groupName: ["finance", "fy26", "q3", "final"] },   // ∩ 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.

04 · Where it runs

Unreleased numbers are material information

Pre-close figures, forecasts and board materials are some of the most sensitive data a company holds. Keep them in scopes only finance agents can read, with every retrieval traced for audit.

Security & compliance
Deployment
  • Managed cloud

    Encrypted in transit and at rest, isolated per organization, and scoped at write time.

  • Dedicated infrastructure

    Enterprise

    Single-tenant, with VPC peering when your data cannot share a network boundary.

  • Self-hosted

    On-premise

    Run the context layer on your own infrastructure, with OpenTelemetry for observability.

Talk to us

Bring the reconciliation that does not tie out.

The one where the agent used a number nobody signed off.