Use case · Content & marketing

Content agents that write in the voice you approved

The brand guidelines say never write "synergy." The content agent read them once, in a prompt, three hundred prompts ago. The newsletter says synergy.

The mixture

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

Every draft forgets the brand

Brand drift is rarely one bad draft. It is a slow slide, one plausible sentence at a time.

  1. 01

    Guidelines are prompts, not context

    Voice, banned words and positioning are pasted into a system prompt that grows until someone trims it. Whatever was trimmed is what gets violated.

  2. 02

    Old positioning resurfaces

    The product was repositioned in spring. The agent keeps pulling phrasing from last year's launch posts, because they are the best-performing pages.

  3. 03

    Every channel drifts separately

    The social agent, the blog agent and the email agent each learned the brand from different examples, and it shows.

02 · What it's made of

Mostly scoped retrieval. 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 · Scoped retrieval

The nearest match stops winning

Content is retrieved by campaign, channel and audience scope, with retired positioning subtracted. The agent drafts from the few approved examples that fit this piece, not from everything you have ever published.

  • Approved examples beat popular ones.
  • Retired positioning stays retired.
  • Each channel drafts from that channel.

Uses · Shared context

One voice across channels

Every content agent reads the same brand definitions and approved examples.

Uses · Current context

This season's positioning

When positioning changes, last season's messaging is subtracted.

Uses · Persistent memory

Editor feedback, remembered

Edits and rejections are written back, so the same mistake is not made twice.

That is four of the five. The fifth, traceable decisions (every answer carries the exact context it was served, and why), is what leads in Customer support, IT & incident response and Compliance & audit 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.

Brand guidelinesPublished postsCampaign briefs (Google Docs)Editor feedbackn8n workflowsAnalytics (Google Sheets)
  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: "brand",  documents: [{    content: "Voice: plain, specific, confident. Never use \"synergy\" or \"revolutionary\". Lead with the customer's problem.",  }],  metadata: {    fileName: "voice-guidelines-2026.md",    groupName: ["marketing", "brand"],   // the sets this belongs to  },});
  2. 02 · Write

    Write the editor's correction back

    Every edit is a lesson. Store it in the brand scope, and the next draft starts from what the editor already fixed.

    context.memory.add
    await client.v1.context.memory.add({  sessionId: "brand_editorial",  contents: [{    role: "user",    content: "Rejected: headline was a rhetorical question. House style is statements, not questions.",  }],  metadata: { groupName: ["marketing", "brand", "feedback"] },});
  3. 03 · Search

    Search before drafting

    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: "Draft the October product newsletter",  scope: "internal",  similarity_threshold: 0.8,  minimum_similarity_threshold: 0.5,  metadata: { groupName: ["marketing", "brand"] },   // ∩ 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 campaigns are confidential

Launch plans, embargoed announcements and pricing changes sit in the same corpus as published posts. Keep them in scopes that only the right agents can read until launch day.

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 draft your editor rewrote.

The one that sounded like everyone except you.